@vm0/cli 9.91.0 → 9.91.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/instrument.ts","../src/lib/network/proxy.ts","../src/lib/api/zero-token.ts","../src/lib/api/config.ts","../src/lib/api/cli-token.ts","../../../packages/core/src/variable-expander.ts","../../../packages/core/src/github-url.ts","../../../packages/core/src/contracts/base.ts","../../../packages/core/src/contracts/errors.ts","../../../packages/core/src/contracts/composes.ts","../../../packages/core/src/contracts/runs.ts","../../../packages/core/src/contracts/firewalls.ts","../../../packages/core/src/contracts/logs.ts","../../../packages/core/src/contracts/orgs.ts","../../../packages/core/src/contracts/org-members.ts","../../../packages/core/src/contracts/storages.ts","../../../packages/core/src/contracts/webhooks.ts","../../../packages/core/src/contracts/cli-auth.ts","../../../packages/core/src/contracts/auth.ts","../../../packages/core/src/contracts/cron.ts","../../../packages/core/src/contracts/secrets.ts","../../../packages/core/src/contracts/variables.ts","../../../packages/core/src/contracts/model-providers.ts","../../../packages/core/src/contracts/sessions.ts","../../../packages/core/src/contracts/chat-threads.ts","../../../packages/core/src/contracts/runners.ts","../../../packages/core/src/contracts/realtime.ts","../../../packages/core/src/contracts/connectors.ts","../../../packages/core/src/firewall-loader.ts","../../../packages/core/src/firewalls/slack.generated.ts","../../../packages/core/src/firewalls/agentmail.generated.ts","../../../packages/core/src/firewalls/ahrefs.generated.ts","../../../packages/core/src/firewalls/airtable.generated.ts","../../../packages/core/src/firewalls/apify.generated.ts","../../../packages/core/src/firewalls/asana.generated.ts","../../../packages/core/src/firewalls/atlassian.generated.ts","../../../packages/core/src/firewalls/axiom.generated.ts","../../../packages/core/src/firewalls/brave-search.generated.ts","../../../packages/core/src/firewalls/brevo.generated.ts","../../../packages/core/src/firewalls/bright-data.generated.ts","../../../packages/core/src/firewalls/browserbase.generated.ts","../../../packages/core/src/firewalls/browserless.generated.ts","../../../packages/core/src/firewalls/cal-com.generated.ts","../../../packages/core/src/firewalls/calendly.generated.ts","../../../packages/core/src/firewalls/canva.generated.ts","../../../packages/core/src/firewalls/chatwoot.generated.ts","../../../packages/core/src/firewalls/clickup.generated.ts","../../../packages/core/src/firewalls/close.generated.ts","../../../packages/core/src/firewalls/cloudflare.generated.ts","../../../packages/core/src/firewalls/cronlytic.generated.ts","../../../packages/core/src/firewalls/customer-io.generated.ts","../../../packages/core/src/firewalls/deepseek.generated.ts","../../../packages/core/src/firewalls/deel.generated.ts","../../../packages/core/src/firewalls/devto.generated.ts","../../../packages/core/src/firewalls/dify.generated.ts","../../../packages/core/src/firewalls/discord.generated.ts","../../../packages/core/src/firewalls/docusign.generated.ts","../../../packages/core/src/firewalls/dropbox.generated.ts","../../../packages/core/src/firewalls/elevenlabs.generated.ts","../../../packages/core/src/firewalls/explorium.generated.ts","../../../packages/core/src/firewalls/fal.generated.ts","../../../packages/core/src/firewalls/figma.generated.ts","../../../packages/core/src/firewalls/firecrawl.generated.ts","../../../packages/core/src/firewalls/fireflies.generated.ts","../../../packages/core/src/firewalls/gamma.generated.ts","../../../packages/core/src/firewalls/garmin-connect.generated.ts","../../../packages/core/src/firewalls/github.generated.ts","../../../packages/core/src/firewalls/gitlab.generated.ts","../../../packages/core/src/firewalls/gmail.generated.ts","../../../packages/core/src/firewalls/google-calendar.generated.ts","../../../packages/core/src/firewalls/google-docs.generated.ts","../../../packages/core/src/firewalls/google-drive.generated.ts","../../../packages/core/src/firewalls/google-sheets.generated.ts","../../../packages/core/src/firewalls/granola.generated.ts","../../../packages/core/src/firewalls/heygen.generated.ts","../../../packages/core/src/firewalls/hubspot.generated.ts","../../../packages/core/src/firewalls/hugging-face.generated.ts","../../../packages/core/src/firewalls/hume.generated.ts","../../../packages/core/src/firewalls/imgur.generated.ts","../../../packages/core/src/firewalls/instagram.generated.ts","../../../packages/core/src/firewalls/instantly.generated.ts","../../../packages/core/src/firewalls/intercom.generated.ts","../../../packages/core/src/firewalls/intervals-icu.generated.ts","../../../packages/core/src/firewalls/jotform.generated.ts","../../../packages/core/src/firewalls/kommo.generated.ts","../../../packages/core/src/firewalls/lark.generated.ts","../../../packages/core/src/firewalls/line.generated.ts","../../../packages/core/src/firewalls/linear.generated.ts","../../../packages/core/src/firewalls/loops.generated.ts","../../../packages/core/src/firewalls/mailchimp.generated.ts","../../../packages/core/src/firewalls/make.generated.ts","../../../packages/core/src/firewalls/mailsac.generated.ts","../../../packages/core/src/firewalls/mercury.generated.ts","../../../packages/core/src/firewalls/metabase.generated.ts","../../../packages/core/src/firewalls/meta-ads.generated.ts","../../../packages/core/src/firewalls/minimax.generated.ts","../../../packages/core/src/firewalls/monday.generated.ts","../../../packages/core/src/firewalls/neon.generated.ts","../../../packages/core/src/firewalls/notion.generated.ts","../../../packages/core/src/firewalls/openai.generated.ts","../../../packages/core/src/firewalls/outlook-calendar.generated.ts","../../../packages/core/src/firewalls/outlook-mail.generated.ts","../../../packages/core/src/firewalls/pdf4me.generated.ts","../../../packages/core/src/firewalls/pdfco.generated.ts","../../../packages/core/src/firewalls/pdforge.generated.ts","../../../packages/core/src/firewalls/perplexity.generated.ts","../../../packages/core/src/firewalls/plausible.generated.ts","../../../packages/core/src/firewalls/podchaser.generated.ts","../../../packages/core/src/firewalls/posthog.generated.ts","../../../packages/core/src/firewalls/productlane.generated.ts","../../../packages/core/src/firewalls/prisma-postgres.generated.ts","../../../packages/core/src/firewalls/pushinator.generated.ts","../../../packages/core/src/firewalls/qdrant.generated.ts","../../../packages/core/src/firewalls/qiita.generated.ts","../../../packages/core/src/firewalls/reddit.generated.ts","../../../packages/core/src/firewalls/reportei.generated.ts","../../../packages/core/src/firewalls/resend.generated.ts","../../../packages/core/src/firewalls/revenuecat.generated.ts","../../../packages/core/src/firewalls/runway.generated.ts","../../../packages/core/src/firewalls/salesforce.generated.ts","../../../packages/core/src/firewalls/scrapeninja.generated.ts","../../../packages/core/src/firewalls/sentry.generated.ts","../../../packages/core/src/firewalls/serpapi.generated.ts","../../../packages/core/src/firewalls/shortio.generated.ts","../../../packages/core/src/firewalls/similarweb.generated.ts","../../../packages/core/src/firewalls/spotify.generated.ts","../../../packages/core/src/firewalls/strava.generated.ts","../../../packages/core/src/firewalls/stripe.generated.ts","../../../packages/core/src/firewalls/supabase.generated.ts","../../../packages/core/src/firewalls/supadata.generated.ts","../../../packages/core/src/firewalls/tavily.generated.ts","../../../packages/core/src/firewalls/tldv.generated.ts","../../../packages/core/src/firewalls/todoist.generated.ts","../../../packages/core/src/firewalls/twenty.generated.ts","../../../packages/core/src/firewalls/v0.generated.ts","../../../packages/core/src/firewalls/vercel.generated.ts","../../../packages/core/src/firewalls/webflow.generated.ts","../../../packages/core/src/firewalls/wix.generated.ts","../../../packages/core/src/firewalls/wrike.generated.ts","../../../packages/core/src/firewalls/x.generated.ts","../../../packages/core/src/firewalls/xero.generated.ts","../../../packages/core/src/firewalls/youtube.generated.ts","../../../packages/core/src/firewalls/zapier.generated.ts","../../../packages/core/src/firewalls/zapsign.generated.ts","../../../packages/core/src/firewalls/zendesk.generated.ts","../../../packages/core/src/firewalls/zeptomail.generated.ts","../../../packages/core/src/firewalls/index.ts","../../../packages/core/src/contracts/firewall-rule-matcher.ts","../../../packages/core/src/contracts/zero-user-preferences.ts","../../../packages/core/src/contracts/org-list.ts","../../../packages/core/src/contracts/onboarding.ts","../../../packages/core/src/contracts/skills.ts","../../../packages/core/src/contracts/zero-agents.ts","../../../packages/core/src/contracts/user-connectors.ts","../../../packages/core/src/contracts/zero-connectors.ts","../../../packages/core/src/contracts/zero-org.ts","../../../packages/core/src/contracts/zero-org-list.ts","../../../packages/core/src/contracts/zero-org-members.ts","../../../packages/core/src/contracts/zero-org-domains.ts","../../../packages/core/src/contracts/zero-composes.ts","../../../packages/core/src/contracts/zero-runs.ts","../../../packages/core/src/contracts/zero-schedules.ts","../../../packages/core/src/contracts/zero-model-providers.ts","../../../packages/core/src/contracts/zero-secrets.ts","../../../packages/core/src/contracts/zero-sessions.ts","../../../packages/core/src/contracts/integrations.ts","../../../packages/core/src/contracts/zero-billing.ts","../../../packages/core/src/contracts/zero-usage.ts","../../../packages/core/src/contracts/zero-team.ts","../../../packages/core/src/contracts/zero-integrations-slack.ts","../../../packages/core/src/contracts/zero-slack-connect.ts","../../../packages/core/src/contracts/zero-slack-channels.ts","../../../packages/core/src/contracts/zero-queue-position.ts","../../../packages/core/src/contracts/zero-member-credit-cap.ts","../../../packages/core/src/contracts/zero-ask-user.ts","../../../packages/core/src/storage-names.ts","../../../packages/core/src/frameworks.ts","../../../packages/core/src/feature-switch.ts","../../../packages/core/src/skill-frontmatter.ts","../src/lib/command/with-error-handler.ts","../src/lib/api/core/client-factory.ts","../src/lib/api/domains/composes.ts","../src/lib/api/domains/zero-user-preferences.ts","../src/lib/api/domains/skills.ts","../src/lib/api/domains/zero-secrets.ts","../src/lib/api/domains/zero-variables.ts","../src/lib/api/domains/zero-connectors.ts","../src/lib/api/domains/logs.ts","../src/lib/api/domains/runs.ts","../src/lib/api/domains/sessions.ts","../src/lib/api/domains/storages.ts","../src/lib/api/domains/zero-orgs.ts","../src/lib/api/domains/zero-org-secrets.ts","../src/lib/api/domains/zero-org-variables.ts","../src/lib/api/domains/zero-org-model-providers.ts","../src/lib/api/domains/zero-agents.ts","../src/lib/api/domains/zero-skills.ts","../src/lib/api/domains/integrations-slack.ts","../src/lib/api/domains/zero-schedules.ts","../src/lib/api/domains/zero-runs.ts","../src/lib/api/domains/zero-ask-user.ts","../src/lib/utils/prompt-utils.ts","../src/lib/events/claude-event-parser.ts","../src/lib/events/event-renderer.ts","../src/lib/events/tool-formatters.ts","../src/commands/run/shared.ts","../src/lib/events/event-parser-factory.ts"],"sourcesContent":["// Sentry instrumentation - must be imported before any other modules\n// Sentry auto-captures uncaught exceptions and unhandled rejections by default.\n// We use beforeSend to filter out operational errors (user mistakes, expected failures).\n// Only programmer errors (bugs) should reach Sentry.\nimport * as Sentry from \"@sentry/node\";\nimport * as os from \"node:os\";\n\ndeclare const __CLI_VERSION__: string;\ndeclare const __DEFAULT_SENTRY_DSN__: string;\n\n// Runtime SENTRY_DSN takes precedence, then build-time default\nconst DSN = process.env.SENTRY_DSN ?? __DEFAULT_SENTRY_DSN__;\n\n/**\n * Patterns for operational errors that should NOT be sent to Sentry.\n * These are user errors or expected failures, not bugs.\n */\nconst OPERATIONAL_ERROR_PATTERNS = [\n // Authentication errors (user needs to login)\n /not authenticated/i,\n // Resource not found (user typo or deleted resource)\n /not found/i,\n /agent not found/i,\n /version not found/i,\n /checkpoint not found/i,\n /session not found/i,\n // File errors (user provided wrong path)\n /file not found/i,\n /environment file not found/i,\n // Validation errors (user input issues)\n /invalid format/i,\n /invalid.*config/i,\n // Rate limiting (expected operational condition)\n /rate limit/i,\n /concurrent run limit/i,\n /insufficient.*credit/i,\n /no model provider/i,\n // Network issues (transient, not bugs)\n /network error/i,\n /network issue/i,\n /fetch failed/i,\n /connection refused/i,\n /timeout/i,\n /ECONNREFUSED/i,\n /ETIMEDOUT/i,\n // Permission/access errors (operational, not bugs)\n /forbidden/i,\n /access denied/i,\n];\n\n/**\n * Check if an error is operational (user error) vs programmer error (bug).\n * Returns true for operational errors that should be filtered out.\n */\nfunction isOperationalError(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n\n const message = error.message;\n return OPERATIONAL_ERROR_PATTERNS.some((pattern) => {\n return pattern.test(message);\n });\n}\n\nif (DSN) {\n Sentry.init({\n dsn: DSN,\n environment: process.env.SENTRY_ENVIRONMENT ?? \"production\",\n release: __CLI_VERSION__,\n sendDefaultPii: false,\n tracesSampleRate: 0,\n shutdownTimeout: 500,\n initialScope: {\n tags: {\n app: \"cli\",\n },\n },\n // Filter out operational errors - only send programmer errors (bugs)\n beforeSend(event, hint) {\n const error = hint.originalException;\n if (isOperationalError(error)) {\n return null; // Drop operational errors\n }\n return event;\n },\n });\n\n Sentry.setContext(\"cli\", {\n version: __CLI_VERSION__,\n command: process.argv.slice(2).join(\" \"),\n });\n\n Sentry.setContext(\"runtime\", {\n node_version: process.version,\n os_platform: os.platform(),\n os_release: os.release(),\n });\n}\n\n// Handle EPIPE gracefully — occurs when piped output is closed early\n// (e.g., `vm0 logs ... | head`). Exit cleanly per Unix convention.\nfunction handleEpipe(err: NodeJS.ErrnoException) {\n if (err.code === \"EPIPE\") {\n process.exit(0);\n }\n throw err;\n}\n\nprocess.stdout.on(\"error\", handleEpipe);\nprocess.stderr.on(\"error\", handleEpipe);\n","import { EnvHttpProxyAgent, setGlobalDispatcher } from \"undici\";\n\ninterface ProxyConfig {\n httpProxy?: string;\n httpsProxy?: string;\n noProxy?: string;\n}\n\nlet configured = false;\n\nfunction getEnvValue(\n lowercaseKey: string,\n uppercaseKey: string,\n): string | null {\n const lowercaseValue = process.env[lowercaseKey]?.trim();\n if (lowercaseValue) {\n return lowercaseValue;\n }\n\n const uppercaseValue = process.env[uppercaseKey]?.trim();\n if (uppercaseValue) {\n return uppercaseValue;\n }\n\n return null;\n}\n\nfunction getProxyConfigFromEnv(): ProxyConfig | null {\n const httpProxy = getEnvValue(\"http_proxy\", \"HTTP_PROXY\");\n const httpsProxy = getEnvValue(\"https_proxy\", \"HTTPS_PROXY\");\n\n if (!httpProxy && !httpsProxy) {\n return null;\n }\n\n const noProxy = getEnvValue(\"no_proxy\", \"NO_PROXY\");\n const config: ProxyConfig = {};\n\n if (httpProxy) {\n config.httpProxy = httpProxy;\n }\n\n if (httpsProxy) {\n config.httpsProxy = httpsProxy;\n }\n\n if (noProxy) {\n config.noProxy = noProxy;\n }\n\n return config;\n}\n\nexport function configureGlobalProxyFromEnv(): void {\n if (configured) {\n return;\n }\n\n const config = getProxyConfigFromEnv();\n if (!config) {\n return;\n }\n\n try {\n const dispatcher = new EnvHttpProxyAgent(config);\n setGlobalDispatcher(dispatcher);\n configured = true;\n } catch (error) {\n throw new Error(\n \"Invalid proxy configuration. Check HTTP_PROXY/HTTPS_PROXY/NO_PROXY values.\",\n {\n cause: error instanceof Error ? error : undefined,\n },\n );\n }\n}\n","export interface ZeroTokenPayload {\n userId: string;\n runId: string;\n orgId: string;\n scope: string;\n capabilities: string[];\n iat: number;\n exp: number;\n}\n\n/**\n * Decode a ZERO_TOKEN JWT payload.\n * Only decodes — does NOT verify signature (server does that).\n * If no token is provided, reads from process.env.ZERO_TOKEN.\n * Returns undefined if token is missing, malformed, or not a zero-scoped token.\n */\nexport function decodeZeroTokenPayload(\n token?: string,\n): ZeroTokenPayload | undefined {\n const raw = token ?? process.env.ZERO_TOKEN;\n if (!raw) return undefined;\n\n const prefix = \"vm0_sandbox_\";\n if (!raw.startsWith(prefix)) return undefined;\n const jwt = raw.slice(prefix.length);\n\n const parts = jwt.split(\".\");\n if (parts.length !== 3) return undefined;\n\n try {\n const payload = JSON.parse(\n Buffer.from(parts[1]!, \"base64url\").toString(),\n ) as ZeroTokenPayload;\n if (payload.scope === \"zero\" && Array.isArray(payload.capabilities)) {\n return payload;\n }\n } catch {\n // Malformed token — fall through\n }\n return undefined;\n}\n","import { homedir } from \"os\";\nimport { join } from \"path\";\nimport { readFile, writeFile, mkdir, unlink } from \"fs/promises\";\nimport { existsSync } from \"fs\";\nimport { decodeCliTokenPayload } from \"./cli-token.js\";\nimport { decodeZeroTokenPayload } from \"./zero-token.js\";\n\ninterface CliConfig {\n token?: string;\n apiUrl?: string;\n}\n\n// Use functions for lazy evaluation (enables testing with mocked homedir)\nfunction getConfigDir(): string {\n return join(homedir(), \".vm0\");\n}\n\nfunction getConfigFile(): string {\n return join(getConfigDir(), \"config.json\");\n}\n\nexport async function loadConfig(): Promise<CliConfig> {\n const configFile = getConfigFile();\n if (!existsSync(configFile)) {\n return {};\n }\n const content = await readFile(configFile, \"utf8\");\n return JSON.parse(content) as CliConfig;\n}\n\nexport async function saveConfig(config: CliConfig): Promise<void> {\n const configDir = getConfigDir();\n const configFile = getConfigFile();\n\n // Ensure config directory exists\n await mkdir(configDir, { recursive: true });\n\n // Merge with existing config\n const existing = await loadConfig();\n const merged = { ...existing, ...config };\n\n // Write config file\n await writeFile(configFile, JSON.stringify(merged, null, 2), \"utf8\");\n}\n\nexport async function getToken(): Promise<string | undefined> {\n // Check environment variables first (ZERO_TOKEN takes priority)\n if (process.env.ZERO_TOKEN) {\n return process.env.ZERO_TOKEN;\n }\n if (process.env.VM0_TOKEN) {\n return process.env.VM0_TOKEN;\n }\n\n const config = await loadConfig();\n return config.token;\n}\n\n/**\n * Get the active token for API requests.\n * Priority: ZERO_TOKEN env var > VM0_TOKEN env var > user token from config\n */\nexport async function getActiveToken(): Promise<string | undefined> {\n return getToken();\n}\n\nexport async function getApiUrl(): Promise<string> {\n const config = await loadConfig();\n const apiUrl = process.env.VM0_API_URL;\n if (apiUrl) {\n // Add protocol if missing\n return apiUrl.startsWith(\"http\") ? apiUrl : `https://${apiUrl}`;\n }\n // Fallback to production API if no config or env var\n return config.apiUrl ?? \"https://www.vm0.ai\";\n}\n\nexport { decodeZeroTokenPayload };\n\n/**\n * Get the active organization for API requests.\n * Priority: ZERO_TOKEN JWT orgId > CLI JWT orgId\n */\nexport async function getActiveOrg(): Promise<string | undefined> {\n // Prefer orgId decoded from ZERO_TOKEN JWT (zero agent runs)\n const zeroPayload = decodeZeroTokenPayload();\n if (zeroPayload) return zeroPayload.orgId;\n\n // Try CLI JWT token (format: vm0_pat_ with scope \"cli\")\n const token = await getToken();\n const cliPayload = decodeCliTokenPayload(token);\n if (cliPayload) return cliPayload.orgId;\n\n return undefined;\n}\n\nexport async function clearConfig(): Promise<void> {\n const configFile = getConfigFile();\n if (existsSync(configFile)) {\n await unlink(configFile);\n }\n}\n","interface CliTokenPayload {\n userId: string;\n orgId: string;\n tokenId: string;\n scope: string;\n iat: number;\n exp: number;\n}\n\n/**\n * Decode a CLI JWT token payload.\n * Only decodes — does NOT verify signature (server does that).\n * Returns undefined if token is missing, malformed, or not a cli-scoped token.\n */\nexport function decodeCliTokenPayload(\n token?: string,\n): CliTokenPayload | undefined {\n const raw = token ?? undefined;\n if (!raw) return undefined;\n\n const patPrefix = \"vm0_pat_\";\n const legacyPrefix = \"vm0_sandbox_\";\n\n let jwt: string;\n if (raw.startsWith(patPrefix)) {\n jwt = raw.slice(patPrefix.length);\n } else if (raw.startsWith(legacyPrefix)) {\n // Backward compat: accept old vm0_sandbox_ prefix during transition\n jwt = raw.slice(legacyPrefix.length);\n } else {\n return undefined;\n }\n\n const parts = jwt.split(\".\");\n if (parts.length !== 3) return undefined;\n\n try {\n const payload = JSON.parse(\n Buffer.from(parts[1]!, \"base64url\").toString(),\n ) as CliTokenPayload;\n if (payload.scope === \"cli\" && payload.orgId && payload.userId) {\n return payload;\n }\n } catch {\n // Malformed token\n }\n return undefined;\n}\n","/**\n * Unified variable expansion for agent compose configurations\n * Supports ${{ vars.xxx }} and ${{ secrets.xxx }} syntax\n * Note: ${{ env.xxx }} is parsed but not currently used (reserved for future)\n */\n\n/**\n * Variable reference with source and name\n */\nexport interface VariableReference {\n source: \"env\" | \"vars\" | \"secrets\";\n name: string;\n}\n\n/**\n * Sources for variable expansion\n */\nexport interface VariableSources {\n env?: Record<string, string | undefined>;\n vars?: Record<string, string>;\n secrets?: Record<string, string>;\n}\n\n/**\n * Result of variable expansion\n */\nexport interface ExpansionResult<T> {\n result: T;\n missingVars: VariableReference[];\n}\n\n/**\n * Regex pattern for ${{ source.name }} syntax\n * Matches: ${{ env.VAR }}, ${{ vars.foo }}, ${{ secrets.key }}\n */\nconst VARIABLE_PATTERN =\n /\\$\\{\\{\\s*(env|vars|secrets)\\.([a-zA-Z_][a-zA-Z0-9_]*)\\s*\\}\\}/g;\n\n/**\n * Extract all variable references from a string\n * @param value - String that may contain variable references\n * @returns Array of variable references found\n */\nexport function extractVariableReferencesFromString(\n value: string,\n): VariableReference[] {\n const refs: VariableReference[] = [];\n const matches = value.matchAll(VARIABLE_PATTERN);\n\n for (const match of matches) {\n const source = match[1] as \"env\" | \"vars\" | \"secrets\";\n const name = match[2]!;\n refs.push({ source, name });\n }\n\n return refs;\n}\n\n/**\n * Extract all variable references from an object recursively\n * @param obj - Object that may contain variable references in string values\n * @returns Array of unique variable references\n */\nexport function extractVariableReferences(obj: unknown): VariableReference[] {\n const refs: VariableReference[] = [];\n const seen = new Set<string>();\n\n function scan(value: unknown): void {\n if (typeof value === \"string\") {\n const stringRefs = extractVariableReferencesFromString(value);\n for (const ref of stringRefs) {\n const key = `${ref.source}.${ref.name}`;\n if (!seen.has(key)) {\n seen.add(key);\n refs.push(ref);\n }\n }\n } else if (Array.isArray(value)) {\n for (const item of value) {\n scan(item);\n }\n } else if (value !== null && typeof value === \"object\") {\n for (const val of Object.values(value)) {\n scan(val);\n }\n }\n }\n\n scan(obj);\n return refs;\n}\n\n/**\n * Expand variables in a string using provided sources\n * @param value - String that may contain variable references\n * @param sources - Sources for variable values\n * @returns Expansion result with resolved string and missing variables\n */\nexport function expandVariablesInString(\n value: string,\n sources: VariableSources,\n): ExpansionResult<string> {\n const missingVars: VariableReference[] = [];\n const seenMissing = new Set<string>();\n\n const result = value.replace(VARIABLE_PATTERN, (fullMatch, source, name) => {\n const typedSource = source as \"env\" | \"vars\" | \"secrets\";\n const resolved = sources[typedSource]?.[name];\n\n if (resolved === undefined) {\n const key = `${typedSource}.${name}`;\n if (!seenMissing.has(key)) {\n seenMissing.add(key);\n missingVars.push({ source: typedSource, name });\n }\n return fullMatch;\n }\n\n return resolved;\n });\n\n return { result, missingVars };\n}\n\n/**\n * Recursively expand variables in an object\n * @param obj - Object that may contain variable references in string values\n * @param sources - Sources for variable values\n * @returns Expansion result with resolved object and missing variables\n */\nexport function expandVariables<T>(\n obj: T,\n sources: VariableSources,\n): ExpansionResult<T> {\n const allMissingVars: VariableReference[] = [];\n const seenMissing = new Set<string>();\n\n function expand(value: unknown): unknown {\n if (typeof value === \"string\") {\n const { result, missingVars } = expandVariablesInString(value, sources);\n for (const missing of missingVars) {\n const key = `${missing.source}.${missing.name}`;\n if (!seenMissing.has(key)) {\n seenMissing.add(key);\n allMissingVars.push(missing);\n }\n }\n return result;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => {\n return expand(item);\n });\n }\n\n if (value !== null && typeof value === \"object\") {\n const result: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(value)) {\n result[key] = expand(val);\n }\n return result;\n }\n\n return value;\n }\n\n const result = expand(obj) as T;\n return { result, missingVars: allMissingVars };\n}\n\n/**\n * Validate that all required variables have values in sources\n * @param refs - Array of variable references to validate\n * @param sources - Sources for variable values\n * @returns Array of missing variable references\n */\nexport function validateRequiredVariables(\n refs: VariableReference[],\n sources: VariableSources,\n): VariableReference[] {\n const missing: VariableReference[] = [];\n\n for (const ref of refs) {\n const resolved = sources[ref.source]?.[ref.name];\n if (resolved === undefined) {\n missing.push(ref);\n }\n }\n\n return missing;\n}\n\n/**\n * Group variable references by source\n * @param refs - Array of variable references\n * @returns Object with arrays grouped by source\n */\nexport function groupVariablesBySource(refs: VariableReference[]): {\n env: VariableReference[];\n vars: VariableReference[];\n secrets: VariableReference[];\n} {\n const groups = {\n env: [] as VariableReference[],\n vars: [] as VariableReference[],\n secrets: [] as VariableReference[],\n };\n\n for (const ref of refs) {\n groups[ref.source].push(ref);\n }\n\n return groups;\n}\n\n/**\n * Extract all variable references from an object and group them by source.\n * Convenience wrapper combining extractVariableReferences + groupVariablesBySource.\n *\n * @example\n * ```ts\n * const env = {\n * API_KEY: \"${{ secrets.OPENAI_KEY }}\",\n * REGION: \"${{ vars.AWS_REGION }}\",\n * STATIC: \"hello\",\n * };\n * const grouped = extractAndGroupVariables(env);\n * // grouped.secrets => [{ source: \"secrets\", name: \"OPENAI_KEY\" }]\n * // grouped.vars => [{ source: \"vars\", name: \"AWS_REGION\" }]\n * // grouped.env => []\n * ```\n */\nexport function extractAndGroupVariables(obj: unknown): {\n env: VariableReference[];\n vars: VariableReference[];\n secrets: VariableReference[];\n} {\n return groupVariablesBySource(extractVariableReferences(obj));\n}\n\n/**\n * Format missing variables for error messages\n * @param missing - Array of missing variable references\n * @returns Formatted error message\n */\nexport function formatMissingVariables(missing: VariableReference[]): string {\n const grouped = groupVariablesBySource(missing);\n const messages: string[] = [];\n\n if (grouped.env.length > 0) {\n const names = grouped.env\n .map((r) => {\n return r.name;\n })\n .join(\", \");\n messages.push(`Environment variables: ${names}`);\n }\n\n if (grouped.vars.length > 0) {\n const names = grouped.vars\n .map((r) => {\n return r.name;\n })\n .join(\", \");\n messages.push(`CLI variables (--vars): ${names}`);\n }\n\n if (grouped.secrets.length > 0) {\n const names = grouped.secrets\n .map((r) => {\n return r.name;\n })\n .join(\", \");\n messages.push(`Secrets: ${names}`);\n }\n\n return messages.join(\"\\n\");\n}\n","/**\n * GitHub URL parsing utilities\n *\n * Provides parsing for GitHub tree URLs used in skills and other resources.\n */\n\nexport interface ParsedGitHubTreeUrl {\n owner: string;\n repo: string;\n branch: string;\n path: string;\n /** Last segment of path (used for mount directory name) */\n skillName: string;\n /** Full path after github.com/ (unique identifier) */\n fullPath: string;\n}\n\n/**\n * Parse a GitHub tree URL into its components\n * Expected format: https://github.com/{owner}/{repo}/tree/{branch}/{path}\n *\n * Note: Branch names containing slashes (e.g., feature/foo) may not parse correctly.\n * The fullPath field is always correct and used for unique storage naming.\n *\n * @param url - GitHub tree URL\n * @returns Parsed URL components, or null if URL format is invalid\n */\nexport function parseGitHubTreeUrl(url: string): ParsedGitHubTreeUrl | null {\n // Normalize: strip trailing slashes for consistent matching\n let normalizedUrl = url;\n while (normalizedUrl.endsWith(\"/\")) {\n normalizedUrl = normalizedUrl.slice(0, -1);\n }\n\n // First, extract the full path after github.com/ (always correct)\n const fullPathMatch = normalizedUrl.match(/^https:\\/\\/github\\.com\\/(.+)$/);\n if (!fullPathMatch) {\n return null;\n }\n const fullPath = fullPathMatch[1]!;\n\n // Parse components (may be incorrect for branches with slashes)\n const regex =\n /^https:\\/\\/github\\.com\\/([^/]+)\\/([^/]+)\\/tree\\/([^/]+)(?:\\/(.+))?$/;\n const match = normalizedUrl.match(regex);\n\n if (!match) {\n return null;\n }\n\n const [, owner, repo, branch, pathPart] = match;\n const resolvedPath = pathPart ?? \"\";\n const pathSegments = resolvedPath.split(\"/\").filter(Boolean);\n const skillName = pathSegments[pathSegments.length - 1] || repo!;\n\n return {\n owner: owner!,\n repo: repo!,\n branch: branch!,\n path: resolvedPath,\n skillName,\n fullPath,\n };\n}\n\n/**\n * Get skill name from path (last segment)\n */\nexport function getSkillNameFromPath(path: string): string {\n const segments = path.split(\"/\").filter(Boolean);\n return segments[segments.length - 1] || path;\n}\n\n/**\n * Parsed GitHub URL supporting multiple formats\n */\nexport interface ParsedGitHubUrl {\n owner: string;\n repo: string;\n /** Branch name, or null if not specified (use default branch) */\n branch: string | null;\n /** Path within repo, or null if root directory */\n path: string | null;\n /** Full path after github.com/ (unique identifier) */\n fullPath: string;\n}\n\n/**\n * Parse any GitHub repository URL into components.\n * Supports multiple URL formats:\n * - https://github.com/owner/repo (plain repo, uses default branch)\n * - https://github.com/owner/repo/tree/branch (root directory with branch)\n * - https://github.com/owner/repo/tree/branch/path (subdirectory)\n *\n * Note: Branch names containing slashes (e.g., feature/foo) may not parse correctly.\n *\n * @param url - GitHub URL\n * @returns Parsed URL components, or null if URL format is invalid\n */\nexport function parseGitHubUrl(url: string): ParsedGitHubUrl | null {\n // Normalize: strip trailing slashes for consistent matching\n let normalizedUrl = url;\n while (normalizedUrl.endsWith(\"/\")) {\n normalizedUrl = normalizedUrl.slice(0, -1);\n }\n\n // Extract full path after github.com/\n const fullPathMatch = normalizedUrl.match(/^https:\\/\\/github\\.com\\/(.+)$/);\n if (!fullPathMatch) {\n return null;\n }\n const fullPath = fullPathMatch[1]!;\n\n // Pattern 1: Plain repo URL (https://github.com/owner/repo)\n const plainMatch = normalizedUrl.match(\n /^https:\\/\\/github\\.com\\/([^/]+)\\/([^/]+)$/,\n );\n if (plainMatch) {\n return {\n owner: plainMatch[1]!,\n repo: plainMatch[2]!,\n branch: null,\n path: null,\n fullPath,\n };\n }\n\n // Pattern 2: Tree URL with optional path\n // https://github.com/owner/repo/tree/branch or https://github.com/owner/repo/tree/branch/path\n const treeMatch = normalizedUrl.match(\n /^https:\\/\\/github\\.com\\/([^/]+)\\/([^/]+)\\/tree\\/([^/]+)(?:\\/(.+))?$/,\n );\n if (treeMatch) {\n return {\n owner: treeMatch[1]!,\n repo: treeMatch[2]!,\n branch: treeMatch[3]!,\n path: treeMatch[4] ?? null,\n fullPath,\n };\n }\n\n return null;\n}\n\n/** Default owner for bare skill name resolution */\nexport const DEFAULT_SKILLS_OWNER = \"vm0-ai\";\n/** Default repository for bare skill name resolution */\nexport const DEFAULT_SKILLS_REPO = \"vm0-skills\";\n/** Default branch for bare skill name resolution */\nexport const DEFAULT_SKILLS_BRANCH = \"main\";\n\n/** Default owner for bare firewall config name resolution */\nexport const DEFAULT_FIREWALLS_OWNER = \"vm0-ai\";\n/** Default repository for bare firewall config name resolution */\nexport const DEFAULT_FIREWALLS_REPO = \"vm0-firewalls\";\n/** Default branch for bare firewall config name resolution */\nexport const DEFAULT_FIREWALLS_BRANCH = \"main\";\n\n/**\n * Resolve a skill reference to a full GitHub tree URL.\n *\n * Supports two formats:\n * - **Bare name** (no `/` and no `https://`): e.g. `\"slack\"` →\n * `https://github.com/vm0-ai/vm0-skills/tree/main/slack`\n * - **Full GitHub URL**: validated by `parseGitHubUrl()` and returned as-is.\n *\n * @param input - Bare skill name or full GitHub URL\n * @returns Canonical full GitHub URL\n * @throws Error if input is empty or not a valid GitHub URL\n */\nexport function resolveSkillRef(input: string): string {\n const trimmed = input.trim();\n\n if (!trimmed) {\n throw new Error(\"Skill reference cannot be empty\");\n }\n\n // Bare name: no \"/\" and no \"https://\"\n if (!trimmed.includes(\"/\") && !trimmed.startsWith(\"https://\")) {\n return `https://github.com/${DEFAULT_SKILLS_OWNER}/${DEFAULT_SKILLS_REPO}/tree/${DEFAULT_SKILLS_BRANCH}/${trimmed}`;\n }\n\n // Full GitHub URL: validate with flexible parser\n const parsed = parseGitHubUrl(trimmed);\n if (!parsed) {\n throw new Error(\n `Invalid skill URL: ${trimmed}. Expected a bare skill name (e.g. \"slack\") or a GitHub URL (https://github.com/{owner}/{repo}[/tree/{branch}[/path]])`,\n );\n }\n\n // Plain repo URL (no branch): normalize to tree URL with default branch\n if (!parsed.branch) {\n return `https://github.com/${parsed.owner}/${parsed.repo}/tree/${DEFAULT_SKILLS_BRANCH}`;\n }\n\n return trimmed;\n}\n\n/**\n * Resolve a firewall config reference to a full GitHub tree URL.\n *\n * Supports two formats:\n * - **Bare name** (no `/` and no `https://`): e.g. `\"custom-api\"` →\n * `https://github.com/vm0-ai/vm0-firewalls/tree/main/custom-api`\n * - **Full GitHub URL**: validated by `parseGitHubUrl()` and returned as-is.\n *\n * @param input - Bare firewall name or full GitHub URL\n * @returns Canonical full GitHub URL\n * @throws Error if input is empty or not a valid GitHub URL\n */\n/** Bare firewall name: alphanumeric, hyphens, dots, underscores. At least 1 char. */\nconst FIREWALL_NAME_PATTERN = /^[a-zA-Z0-9]([a-zA-Z0-9\\-_.]*[a-zA-Z0-9])?$/;\n\nexport function resolveFirewallRef(input: string): string {\n const trimmed = input.trim();\n\n if (!trimmed) {\n throw new Error(\"Firewall reference cannot be empty\");\n }\n\n // Bare name: no \"/\" and no \"https://\"\n if (!trimmed.includes(\"/\") && !trimmed.startsWith(\"https://\")) {\n if (!FIREWALL_NAME_PATTERN.test(trimmed)) {\n throw new Error(\n `Invalid firewall name \"${trimmed}\": must be alphanumeric with hyphens, dots, or underscores`,\n );\n }\n return `https://github.com/${DEFAULT_FIREWALLS_OWNER}/${DEFAULT_FIREWALLS_REPO}/tree/${DEFAULT_FIREWALLS_BRANCH}/${trimmed}`;\n }\n\n // Full GitHub URL: validate with flexible parser\n const parsed = parseGitHubUrl(trimmed);\n if (!parsed) {\n throw new Error(\n `Invalid firewall URL: ${trimmed}. Expected a bare firewall name (e.g. \"custom-api\") or a GitHub URL (https://github.com/{owner}/{repo}[/tree/{branch}[/path]])`,\n );\n }\n\n // Plain repo URL (no branch): normalize to tree URL with default branch\n if (!parsed.branch) {\n return `https://github.com/${parsed.owner}/${parsed.repo}/tree/${DEFAULT_FIREWALLS_BRANCH}`;\n }\n\n return trimmed;\n}\n","/**\n * ts-rest contract initialization\n * Re-exported from @ts-rest/core for use in contract definitions\n */\nimport { z } from \"zod\";\n\nexport { initContract } from \"@ts-rest/core\";\n\n/**\n * Shared headers schema for endpoints requiring authentication.\n * The authorization header is optional - endpoints handle missing auth\n * by returning 401 responses.\n *\n * NOTE: This uses z.object() despite @ts-rest expecting a plain object\n * for headers. This is intentional — with Zod 4, @ts-rest's\n * InferHeadersOutput type relies on z.AnyZodObject (which resolves to\n * `any` in Zod 4) to correctly infer z.output<T> for handler types.\n * Using a plain object breaks handler type inference (headers becomes {}).\n * The resulting TS2322 on contract definitions is a known @ts-rest + Zod 4\n * compatibility issue (https://github.com/ts-rest/ts-rest/issues/852).\n */\nexport const authHeadersSchema = z.object({\n authorization: z.string().optional(),\n});\n","import { z } from \"zod\";\n\n/**\n * API error definitions with associated HTTP status codes\n * Used across all API endpoints for consistent error responses\n */\nexport const ApiError = {\n BAD_REQUEST: { status: 400 as const, code: \"BAD_REQUEST\" },\n UNAUTHORIZED: { status: 401 as const, code: \"UNAUTHORIZED\" },\n FORBIDDEN: { status: 403 as const, code: \"FORBIDDEN\" },\n NOT_FOUND: { status: 404 as const, code: \"NOT_FOUND\" },\n CONFLICT: { status: 409 as const, code: \"CONFLICT\" },\n INSUFFICIENT_CREDITS: {\n status: 402 as const,\n code: \"INSUFFICIENT_CREDITS\",\n },\n PAYLOAD_TOO_LARGE: { status: 413 as const, code: \"PAYLOAD_TOO_LARGE\" },\n TOO_MANY_REQUESTS: { status: 429 as const, code: \"TOO_MANY_REQUESTS\" },\n NO_MODEL_PROVIDER: {\n status: 422 as const,\n code: \"NO_MODEL_PROVIDER\",\n },\n PROVIDER_UNAVAILABLE: {\n status: 503 as const,\n code: \"PROVIDER_UNAVAILABLE\",\n },\n INTERNAL_SERVER_ERROR: {\n status: 500 as const,\n code: \"INTERNAL_SERVER_ERROR\",\n },\n} as const;\n\nexport type ApiErrorKey = keyof typeof ApiError;\n\n/**\n * Helper to create a standardized error response\n * Ensures the correct HTTP status code is always used with the error code\n */\nexport function createErrorResponse<K extends ApiErrorKey>(\n errorKey: K,\n message: string,\n) {\n const { status, code } = ApiError[errorKey];\n return {\n status,\n body: { error: { message, code } },\n };\n}\n\n/**\n * Standard API error response schema\n * Used across all API endpoints for consistent error handling\n */\nexport const apiErrorSchema = z.object({\n error: z.object({\n message: z.string(),\n code: z.string(),\n }),\n});\n\nexport type ApiErrorResponse = z.infer<typeof apiErrorSchema>;\n\n/**\n * Centralized guidance registry for run error codes.\n * All client surfaces (Web, CLI, Slack, Telegram) use this to render\n * actionable error messages. To add a new error code, add an entry here\n * and create the corresponding factory function in errors.ts.\n */\nexport const RUN_ERROR_GUIDANCE: Record<\n string,\n { title: string; guidance: string; cliHint?: string }\n> = {\n NO_MODEL_PROVIDER: {\n title: \"No model provider configured\",\n guidance: \"Configure a model provider to start running agents.\",\n cliHint: \"zero org model-provider setup\",\n },\n INSUFFICIENT_CREDITS: {\n title: \"Credits depleted\",\n guidance: \"Add credits or configure your own API key to continue.\",\n },\n PROVIDER_INCOMPATIBLE: {\n title: \"Provider not compatible\",\n guidance: \"This session was created with a different provider type.\",\n },\n PROVIDER_UNAVAILABLE: {\n title: \"Provider temporarily unavailable\",\n guidance:\n \"The model provider is temporarily unavailable. Please try again later.\",\n },\n TOO_MANY_REQUESTS: {\n title: \"Concurrent run limit reached\",\n guidance:\n \"Wait for your current run to complete before starting a new one.\",\n },\n};\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\n/**\n * Version query parameter schema for compose versions\n *\n * Accepts: \"latest\" tag or 8-64 hex character version hash\n */\nconst composeVersionQuerySchema = z\n .string()\n .min(1, \"Missing version query parameter\")\n .regex(\n /^[a-f0-9]{8,64}$|^latest$/i,\n \"Version must be 8-64 hex characters or 'latest'\",\n );\n\n/**\n * Agent name regex: 3-64 chars, letters/numbers/hyphens, start and end with alphanumeric.\n */\nexport const AGENT_NAME_REGEX = /^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}[a-zA-Z0-9]$/;\n\n/**\n * Capabilities for the zero-layer capability system (ZERO_TOKEN).\n * These protect /api/zero/* routes only.\n */\nexport const ZERO_CAPABILITIES = [\n \"agent:read\",\n \"agent:write\",\n \"agent-run:read\",\n \"agent-run:write\",\n \"schedule:read\",\n \"schedule:write\",\n \"slack:write\",\n] as const;\n\n/** Inferred union type of all zero capability strings. */\nexport type ZeroCapability = (typeof ZERO_CAPABILITIES)[number];\n\n/** Metadata for a single zero capability. */\nexport interface ZeroCapabilityMeta {\n group: string;\n label: string;\n}\n\n/**\n * Exhaustive mapping from every zero capability to its UI group and label.\n * Adding a new capability to ZERO_CAPABILITIES without updating this record\n * will produce a TypeScript compile error.\n */\nexport const ZERO_CAPABILITY_META: Record<ZeroCapability, ZeroCapabilityMeta> =\n {\n \"agent:read\": { group: \"Agent\", label: \"Read agents\" },\n \"agent:write\": { group: \"Agent\", label: \"Create, update & delete agents\" },\n \"agent-run:read\": { group: \"Agent Runs\", label: \"View runs & telemetry\" },\n \"agent-run:write\": { group: \"Agent Runs\", label: \"Create & cancel runs\" },\n \"schedule:read\": { group: \"Schedules\", label: \"View schedules\" },\n \"schedule:write\": {\n group: \"Schedules\",\n label: \"Create & delete schedules\",\n },\n \"slack:write\": { group: \"Integrations\", label: \"Send Slack messages\" },\n };\n\n/**\n * Agent name validation schema\n * - Must be 3-64 characters\n * - Letters, numbers, and hyphens only\n * - Must start and end with letter or number\n */\nconst agentNameSchema = z\n .string()\n .min(3, \"Agent name must be at least 3 characters\")\n .max(64, \"Agent name must be 64 characters or less\")\n .regex(\n AGENT_NAME_REGEX,\n \"Agent name must start and end with letter or number, and contain only letters, numbers, and hyphens\",\n );\n\n/**\n * Volume configuration schema\n */\nconst volumeConfigSchema = z.object({\n name: z.string().min(1, \"Volume name is required\"),\n version: z.string().min(1, \"Volume version is required\"),\n /** When true, skip mounting without error if volume doesn't exist */\n optional: z.boolean().optional(),\n});\n\n/**\n * Agent definition schema\n */\nconst agentDefinitionSchema = z.object({\n description: z.string().optional(),\n framework: z.string().min(1, \"Framework is required\"),\n volumes: z.array(z.string()).optional(),\n environment: z.record(z.string(), z.string()).optional(),\n /**\n * Path to instructions file (e.g., AGENTS.md).\n * Auto-uploaded as volume and mounted at /home/user/.claude/CLAUDE.md\n */\n instructions: z\n .string()\n .min(1, \"Instructions path cannot be empty\")\n .refine((val) => {\n return (\n !val.includes(\"..\") && !val.startsWith(\"/\") && !val.startsWith(\"\\\\\")\n );\n }, \"Instructions path must be a relative path without '..' segments\")\n .optional(),\n /**\n * Array of GitHub tree URLs for agent skills.\n * Each skill is auto-downloaded and mounted at /home/user/.claude/skills/{skillName}/\n */\n skills: z.array(z.string()).optional(),\n /**\n * Route this agent to a self-hosted runner instead of E2B.\n * When specified, runs will be queued for the specified runner group.\n */\n experimental_runner: z\n .object({\n group: z\n .string()\n .regex(\n /^[a-z0-9-]+\\/[a-z0-9-]+$/,\n \"Runner group must be in vm0/<name> format (e.g., vm0/production)\",\n ),\n })\n .optional(),\n /**\n * VM profile for resource allocation (e.g., \"vm0/default\").\n * Determines rootfs image and VM resources (vCPU, memory).\n * Defaults to \"vm0/default\" when omitted.\n */\n experimental_profile: z\n .string()\n .regex(\n /^[a-z0-9-]+\\/[a-z0-9-]+$/,\n \"Profile must be in org/name format (e.g., vm0/default)\",\n )\n .optional(),\n /**\n * External firewall rules for proxy-side token replacement.\n * Map format: { slack: { permissions: [...] | \"all\" } }\n * Resolved to full ExpandedFirewallConfig[] at runtime.\n */\n experimental_firewalls: z\n .record(\n z.string(),\n z.object({\n permissions: z.union([z.literal(\"all\"), z.array(z.string()).min(1)]),\n }),\n )\n .optional(),\n});\n\n/**\n * Agent compose YAML content schema (CLI input — experimental_firewalls is map format)\n */\nconst agentComposeContentSchema = z.object({\n version: z.string().min(1, \"Version is required\"),\n agents: z.record(z.string(), agentDefinitionSchema),\n volumes: z.record(z.string(), volumeConfigSchema).optional(),\n});\n\n/**\n * Agent compose content schema for API requests.\n * experimental_firewalls is no longer stored in compose content — all firewalls\n * are injected at runtime. The field is accepted as unknown for backward\n * compatibility with older stored compose versions (ignored at runtime).\n */\nconst agentComposeApiContentSchema = z.object({\n version: z.string().min(1, \"Version is required\"),\n agents: z.record(\n z.string(),\n agentDefinitionSchema.extend({\n // Legacy: older compose versions may have this field (map or expanded array).\n // Accepted for backward compat but ignored at runtime.\n experimental_firewalls: z.unknown().optional(),\n }),\n ),\n volumes: z.record(z.string(), volumeConfigSchema).optional(),\n});\n\n/**\n * Compose response schema (used in GET responses)\n */\nconst composeResponseSchema = z.object({\n id: z.string(),\n name: z.string(),\n headVersionId: z.string().nullable(),\n content: agentComposeApiContentSchema.nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\n/**\n * Create/update compose response schema (used in POST responses)\n */\nconst createComposeResponseSchema = z.object({\n composeId: z.string(),\n name: z.string(),\n versionId: z.string(),\n action: z.enum([\"created\", \"existing\"]),\n updatedAt: z.string(),\n});\n\n/**\n * Composes main route contract (/api/agent/composes)\n * Handles GET by name and POST create/update\n */\nexport const composesMainContract = c.router({\n /**\n * GET /api/agent/composes?name={name}&org={org}\n * Get agent compose by name with HEAD version content\n * If org is not provided, uses the authenticated user's default org\n */\n getByName: {\n method: \"GET\",\n path: \"/api/agent/composes\",\n headers: authHeadersSchema,\n query: z.object({\n name: z.string().min(1, \"Missing name query parameter\"),\n }),\n responses: {\n 200: composeResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"Get agent compose by name\",\n },\n\n /**\n * POST /api/agent/composes\n * Create or update an agent compose version\n *\n * Returns 201 when a new compose is created, 200 when updating an existing compose.\n * The action field indicates whether a new version was created or an existing one reused.\n */\n create: {\n method: \"POST\",\n path: \"/api/agent/composes\",\n headers: authHeadersSchema,\n body: z.object({\n content: agentComposeApiContentSchema,\n }),\n responses: {\n 200: createComposeResponseSchema,\n 201: createComposeResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"Create or update agent compose version\",\n },\n});\n\n/**\n * Composes by ID route contract (/api/agent/composes/[id])\n */\nexport const composesByIdContract = c.router({\n /**\n * GET /api/agent/composes/:id\n * Get agent compose by ID with HEAD version content\n */\n getById: {\n method: \"GET\",\n path: \"/api/agent/composes/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Compose ID is required\"),\n }),\n responses: {\n 200: composeResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get agent compose by ID\",\n },\n\n /**\n * DELETE /api/agent/composes/:id\n * Delete agent compose and all associated resources (versions, schedules, permissions, etc.)\n * Returns 409 Conflict if agent has running or pending runs\n */\n delete: {\n method: \"DELETE\",\n path: \"/api/agent/composes/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().uuid(\"Compose ID is required\"),\n }),\n body: c.noBody(),\n responses: {\n 204: c.noBody(),\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Delete agent compose\",\n },\n});\n\n/**\n * Composes versions route contract (/api/agent/composes/versions)\n */\nexport const composesVersionsContract = c.router({\n /**\n * GET /api/agent/composes/versions?composeId={id}&version={hash|tag}\n * Resolve a version specifier to a full version ID\n */\n resolveVersion: {\n method: \"GET\",\n path: \"/api/agent/composes/versions\",\n headers: authHeadersSchema,\n query: z.object({\n composeId: z.string().min(1, \"Missing composeId query parameter\"),\n version: composeVersionQuerySchema,\n }),\n responses: {\n 200: z.object({\n versionId: z.string(),\n tag: z.string().optional(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Resolve version specifier to full version ID\",\n },\n});\n\n/**\n * Compose list item schema (used in list response)\n */\nconst composeListItemSchema = z.object({\n id: z.string(),\n name: z.string(),\n displayName: z.string().nullable().optional(),\n description: z.string().nullable().optional(),\n sound: z.string().nullable().optional(),\n headVersionId: z.string().nullable(),\n updatedAt: z.string(),\n});\n\n/**\n * Composes list route contract (/api/agent/composes/list)\n */\nexport const composesListContract = c.router({\n /**\n * GET /api/agent/composes/list?org={org}\n * List all agent composes for an org\n * Uses the authenticated user's active org.\n */\n list: {\n method: \"GET\",\n path: \"/api/agent/composes/list\",\n headers: authHeadersSchema,\n query: z.object({}),\n responses: {\n 200: z.object({\n composes: z.array(composeListItemSchema),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"List all agent composes for an org\",\n },\n});\n\n/**\n * Compose metadata update schema\n */\nconst metadataUpdateSchema = z.object({\n displayName: z.string().optional(),\n description: z.string().optional(),\n sound: z.string().optional(),\n});\n\n/**\n * Composes metadata route contract (/api/agent/composes/[id]/metadata)\n */\nexport const composesMetadataContract = c.router({\n /**\n * PATCH /api/agent/composes/:id/metadata\n * Update agent compose metadata (displayName, description, sound)\n */\n updateMetadata: {\n method: \"PATCH\",\n path: \"/api/agent/composes/:id/metadata\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Compose ID is required\"),\n }),\n body: metadataUpdateSchema,\n responses: {\n 200: z.object({ ok: z.literal(true) }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Update agent compose metadata\",\n },\n});\n\n/**\n * Compose instructions response schema\n */\nconst composeInstructionsResponseSchema = z.object({\n content: z.string().nullable(),\n filename: z.string().nullable(),\n});\n\n/**\n * Composes instructions route contract (/api/agent/composes/[id]/instructions)\n */\nexport const composesInstructionsContract = c.router({\n /**\n * GET /api/agent/composes/:id/instructions\n * Get the instructions content for an agent compose\n */\n getInstructions: {\n method: \"GET\",\n path: \"/api/agent/composes/:id/instructions\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Compose ID is required\"),\n }),\n responses: {\n 200: composeInstructionsResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get agent compose instructions content\",\n },\n});\n\nexport type ComposesMainContract = typeof composesMainContract;\nexport type ComposesByIdContract = typeof composesByIdContract;\nexport type ComposesVersionsContract = typeof composesVersionsContract;\nexport type ComposesListContract = typeof composesListContract;\nexport type ComposesMetadataContract = typeof composesMetadataContract;\nexport type ComposesInstructionsContract = typeof composesInstructionsContract;\n\n// Export schemas for reuse\nexport {\n agentNameSchema,\n volumeConfigSchema,\n agentDefinitionSchema,\n agentComposeContentSchema,\n agentComposeApiContentSchema,\n composeResponseSchema,\n composeListItemSchema,\n metadataUpdateSchema,\n composeInstructionsResponseSchema,\n};\n\n// Export inferred types for consumers\nexport type ComposeResponse = z.infer<typeof composeResponseSchema>;\nexport type ComposeListItem = z.infer<typeof composeListItemSchema>;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport { firewallPoliciesSchema } from \"./firewalls\";\nimport { triggerSourceSchema } from \"./logs\";\nimport { orgTierSchema } from \"./orgs\";\n\nconst c = initContract();\n\n/**\n * All valid run status values\n */\nexport const ALL_RUN_STATUSES = [\n \"queued\",\n \"pending\",\n \"running\",\n \"completed\",\n \"failed\",\n \"timeout\",\n \"cancelled\",\n] as const;\n\n/**\n * Run status enum\n */\nconst runStatusSchema = z.enum(ALL_RUN_STATUSES);\n\n/**\n * Unified run request schema - supports all run modes via optional parameters\n */\nconst unifiedRunRequestSchema = z.object({\n // High-level shortcuts (mutually exclusive with each other)\n checkpointId: z.string().optional(),\n sessionId: z.string().optional(),\n\n // Base parameters (can be used directly or overridden after shortcut expansion)\n agentComposeId: z.string().optional(),\n agentComposeVersionId: z.string().optional(),\n conversationId: z.string().optional(),\n artifactName: z.string().optional(),\n artifactVersion: z.string().optional(),\n vars: z.record(z.string(), z.string()).optional(),\n secrets: z.record(z.string(), z.string()).optional(),\n volumeVersions: z.record(z.string(), z.string()).optional(),\n memoryName: z.string().optional(),\n\n // Debug flag to force real Claude in mock environments (internal use only)\n debugNoMockClaude: z.boolean().optional(),\n\n // Model provider for automatic secret injection\n modelProvider: z.string().optional(),\n\n // Environment validation flag - when true, validates secrets/vars before running\n checkEnv: z.boolean().optional(),\n\n // Required\n prompt: z.string().min(1, \"Missing prompt\"),\n\n // Optional system prompt to append to the agent's system prompt\n appendSystemPrompt: z.string().optional(),\n\n // Optional list of tools to disable in Claude CLI (passed as --disallowed-tools)\n disallowedTools: z.array(z.string()).optional(),\n\n // Optional list of tools to make available in Claude CLI (passed as --tools)\n tools: z.array(z.string()).optional(),\n\n // Settings JSON to pass to Claude CLI (passed as --settings)\n settings: z.string().optional(),\n\n // How the run was triggered (defaults to \"cli\" on the server if not provided)\n triggerSource: triggerSourceSchema.optional(),\n\n // Per-permission firewall policies (e.g., { \"github\": { \"actions:read\": \"allow\" } })\n firewallPolicies: firewallPoliciesSchema.optional(),\n});\n\n/**\n * Create run response schema\n */\nconst createRunResponseSchema = z.object({\n runId: z.string(),\n status: runStatusSchema,\n sandboxId: z.string().optional(),\n output: z.string().optional(),\n error: z.string().optional(),\n executionTimeMs: z.number().optional(),\n createdAt: z.string(),\n});\n\n/**\n * Get run response schema\n */\nconst getRunResponseSchema = z.object({\n runId: z.string(),\n agentComposeVersionId: z.string().nullable(),\n status: runStatusSchema,\n prompt: z.string(),\n appendSystemPrompt: z.string().nullable(),\n vars: z.record(z.string(), z.string()).optional(),\n sandboxId: z.string().optional(),\n result: z\n .object({\n output: z.string().optional(),\n executionTimeMs: z.number().optional(),\n agentSessionId: z.string().optional(),\n checkpointId: z.string().optional(),\n conversationId: z.string().optional(),\n })\n .passthrough()\n .optional(),\n error: z.string().optional(),\n createdAt: z.string(),\n startedAt: z.string().optional(),\n completedAt: z.string().optional(),\n});\n\n/**\n * Run event schema\n */\nconst runEventSchema = z.object({\n sequenceNumber: z.number(),\n eventType: z.string(),\n eventData: z.unknown(),\n createdAt: z.string(),\n});\n\n/**\n * Run result schema (present when status = 'completed')\n */\nconst runResultSchema = z.object({\n checkpointId: z.string(),\n agentSessionId: z.string(),\n conversationId: z.string(),\n artifact: z.record(z.string(), z.string()).optional(), // optional when run has no artifact\n volumes: z.record(z.string(), z.string()).optional(),\n memory: z.record(z.string(), z.string()).optional(),\n});\n\n/**\n * Run state schema (replaces vm0_start/vm0_result/vm0_error events)\n */\nconst runStateSchema = z.object({\n status: runStatusSchema,\n result: runResultSchema.optional(),\n error: z.string().optional(),\n});\n\n/**\n * Events response schema\n */\nconst eventsResponseSchema = z.object({\n events: z.array(runEventSchema),\n hasMore: z.boolean(),\n nextSequence: z.number(),\n run: runStateSchema,\n framework: z.string(),\n});\n\n/**\n * Run list item schema\n */\nconst runListItemSchema = z.object({\n id: z.string(),\n agentName: z.string(),\n status: runStatusSchema,\n prompt: z.string(),\n appendSystemPrompt: z.string().nullable(),\n createdAt: z.string(),\n startedAt: z.string().nullable(),\n});\n\n/**\n * Runs list response schema\n */\nconst runsListResponseSchema = z.object({\n runs: z.array(runListItemSchema),\n});\n\n/**\n * Runs main route contract (/api/agent/runs)\n * Handles GET list and POST create\n */\nexport const runsMainContract = c.router({\n /**\n * GET /api/agent/runs\n * List agent runs (pending and running by default)\n */\n list: {\n method: \"GET\",\n path: \"/api/agent/runs\",\n headers: authHeadersSchema,\n query: z.object({\n status: z.string().optional(), // comma-separated: \"pending,running\"\n agent: z.string().optional(), // agent name filter\n since: z.string().optional(), // ISO timestamp\n until: z.string().optional(), // ISO timestamp\n limit: z.coerce.number().min(1).max(100).default(50),\n }),\n responses: {\n 200: runsListResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"List agent runs\",\n },\n /**\n * POST /api/agent/runs\n * Create and execute a new agent run\n */\n create: {\n method: \"POST\",\n path: \"/api/agent/runs\",\n headers: authHeadersSchema,\n body: unifiedRunRequestSchema,\n responses: {\n 201: createRunResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 402: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 422: apiErrorSchema,\n 503: apiErrorSchema,\n },\n summary: \"Create and execute agent run\",\n },\n});\n\n/**\n * Runs by ID route contract (/api/agent/runs/[id])\n */\nexport const runsByIdContract = c.router({\n /**\n * GET /api/agent/runs/:id\n * Get agent run status and results\n */\n getById: {\n method: \"GET\",\n path: \"/api/agent/runs/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Run ID is required\"),\n }),\n responses: {\n 200: getRunResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get agent run by ID\",\n },\n});\n\n/**\n * Cancel run response schema\n */\nconst cancelRunResponseSchema = z.object({\n id: z.string(),\n status: z.literal(\"cancelled\"),\n message: z.string(),\n});\n\n/**\n * Runs cancel route contract (/api/agent/runs/[id]/cancel)\n */\nexport const runsCancelContract = c.router({\n /**\n * POST /api/agent/runs/:id/cancel\n * Cancel a pending or running run\n */\n cancel: {\n method: \"POST\",\n path: \"/api/agent/runs/:id/cancel\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Run ID is required\"),\n }),\n body: z.undefined(),\n responses: {\n 200: cancelRunResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Cancel a pending or running run\",\n },\n});\n\n/**\n * Run events route contract (/api/agent/runs/[id]/events)\n */\nexport const runEventsContract = c.router({\n /**\n * GET /api/agent/runs/:id/events\n * Poll for agent run events with pagination\n */\n getEvents: {\n method: \"GET\",\n path: \"/api/agent/runs/:id/events\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Run ID is required\"),\n }),\n query: z.object({\n since: z.coerce.number().default(-1),\n limit: z.coerce.number().default(100),\n }),\n responses: {\n 200: eventsResponseSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get agent run events\",\n },\n});\n\n/**\n * Telemetry metric schema\n */\nconst telemetryMetricSchema = z.object({\n ts: z.string(),\n cpu: z.number(),\n mem_used: z.number(),\n mem_total: z.number(),\n disk_used: z.number(),\n disk_total: z.number(),\n});\n\n/**\n * System log response schema\n */\nconst systemLogResponseSchema = z.object({\n systemLog: z.string(),\n hasMore: z.boolean(),\n});\n\n/**\n * Metrics response schema\n */\nconst metricsResponseSchema = z.object({\n metrics: z.array(telemetryMetricSchema),\n hasMore: z.boolean(),\n});\n\n/**\n * Agent events response schema (for logs command)\n */\nconst agentEventsResponseSchema = z.object({\n events: z.array(runEventSchema),\n hasMore: z.boolean(),\n framework: z.string(),\n});\n\n/**\n * Network log entry schema (MITM proxy)\n * [NETWORK_LOG_FIELDS] — keep in sync with all network log schemas\n */\nconst networkLogEntrySchema = z.object({\n timestamp: z.string(),\n type: z.string().optional(),\n action: z.enum([\"ALLOW\", \"DENY\"]).optional(),\n host: z.string().optional(),\n port: z.number().optional(),\n method: z.string().optional(),\n url: z.string().optional(),\n status: z.number().optional(),\n latency_ms: z.number().optional(),\n request_size: z.number().optional(),\n response_size: z.number().optional(),\n firewall_base: z.string().optional(),\n firewall_name: z.string().optional(),\n firewall_ref: z.string().optional(),\n firewall_permission: z.string().optional(),\n firewall_rule_match: z.string().optional(),\n firewall_params: z.record(z.string(), z.string()).optional(),\n firewall_error: z.string().optional(),\n token_resolved_secrets: z.array(z.string()).optional(),\n token_refreshed_connectors: z.array(z.string()).optional(),\n token_refreshed_secrets: z.array(z.string()).optional(),\n token_cache_hit: z.boolean().optional(),\n error: z.string().optional(),\n});\n\n/**\n * Network logs response schema\n */\nconst networkLogsResponseSchema = z.object({\n networkLogs: z.array(networkLogEntrySchema),\n hasMore: z.boolean(),\n});\n\n/**\n * Telemetry response schema (legacy - combined format)\n */\nconst telemetryResponseSchema = z.object({\n systemLog: z.string(),\n metrics: z.array(telemetryMetricSchema),\n});\n\n/**\n * Run telemetry route contract (/api/agent/runs/[id]/telemetry)\n * Legacy combined format\n */\nexport const runTelemetryContract = c.router({\n /**\n * GET /api/agent/runs/:id/telemetry\n * Get aggregated telemetry data for a run (legacy combined format)\n */\n getTelemetry: {\n method: \"GET\",\n path: \"/api/agent/runs/:id/telemetry\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Run ID is required\"),\n }),\n responses: {\n 200: telemetryResponseSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get run telemetry data\",\n },\n});\n\n/**\n * System log route contract (/api/agent/runs/[id]/telemetry/system-log)\n */\nexport const runSystemLogContract = c.router({\n /**\n * GET /api/agent/runs/:id/telemetry/system-log\n * Get system log with pagination\n */\n getSystemLog: {\n method: \"GET\",\n path: \"/api/agent/runs/:id/telemetry/system-log\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Run ID is required\"),\n }),\n query: z.object({\n since: z.coerce.number().optional(),\n limit: z.coerce.number().min(1).max(100).default(5),\n order: z.enum([\"asc\", \"desc\"]).default(\"desc\"),\n }),\n responses: {\n 200: systemLogResponseSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get system log with pagination\",\n },\n});\n\n/**\n * Metrics route contract (/api/agent/runs/[id]/telemetry/metrics)\n */\nexport const runMetricsContract = c.router({\n /**\n * GET /api/agent/runs/:id/telemetry/metrics\n * Get metrics with pagination\n */\n getMetrics: {\n method: \"GET\",\n path: \"/api/agent/runs/:id/telemetry/metrics\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Run ID is required\"),\n }),\n query: z.object({\n since: z.coerce.number().optional(),\n limit: z.coerce.number().min(1).max(100).default(5),\n order: z.enum([\"asc\", \"desc\"]).default(\"desc\"),\n }),\n responses: {\n 200: metricsResponseSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get metrics with pagination\",\n },\n});\n\n/**\n * Agent events route contract (/api/agent/runs/[id]/telemetry/agent)\n */\nexport const runAgentEventsContract = c.router({\n /**\n * GET /api/agent/runs/:id/telemetry/agent\n * Get agent events with pagination (for vm0 logs default)\n */\n getAgentEvents: {\n method: \"GET\",\n path: \"/api/agent/runs/:id/telemetry/agent\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Run ID is required\"),\n }),\n query: z.object({\n since: z.coerce.number().optional(),\n limit: z.coerce.number().min(1).max(100).default(5),\n order: z.enum([\"asc\", \"desc\"]).default(\"desc\"),\n }),\n responses: {\n 200: agentEventsResponseSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get agent events with pagination\",\n },\n});\n\n/**\n * Network logs route contract (/api/agent/runs/[id]/telemetry/network)\n */\nexport const runNetworkLogsContract = c.router({\n /**\n * GET /api/agent/runs/:id/telemetry/network\n * Get network logs with pagination (for vm0 logs --network)\n */\n getNetworkLogs: {\n method: \"GET\",\n path: \"/api/agent/runs/:id/telemetry/network\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Run ID is required\"),\n }),\n query: z.object({\n since: z.coerce.number().optional(),\n limit: z.coerce.number().min(1).max(100).default(5),\n order: z.enum([\"asc\", \"desc\"]).default(\"desc\"),\n }),\n responses: {\n 200: networkLogsResponseSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get network logs with pagination\",\n },\n});\n\nexport type RunsMainContract = typeof runsMainContract;\nexport type RunsByIdContract = typeof runsByIdContract;\nexport type RunsCancelContract = typeof runsCancelContract;\nexport type RunEventsContract = typeof runEventsContract;\nexport type RunTelemetryContract = typeof runTelemetryContract;\nexport type RunSystemLogContract = typeof runSystemLogContract;\nexport type RunMetricsContract = typeof runMetricsContract;\nexport type RunAgentEventsContract = typeof runAgentEventsContract;\nexport type RunNetworkLogsContract = typeof runNetworkLogsContract;\n\n/**\n * Logs search result schema\n */\nconst searchResultSchema = z.object({\n runId: z.string(),\n agentName: z.string(),\n matchedEvent: runEventSchema,\n contextBefore: z.array(runEventSchema),\n contextAfter: z.array(runEventSchema),\n});\n\n/**\n * Logs search response schema\n */\nconst logsSearchResponseSchema = z.object({\n results: z.array(searchResultSchema),\n hasMore: z.boolean(),\n});\n\n/**\n * Logs search route contract (/api/logs/search)\n * Search agent events across runs\n */\nexport const logsSearchContract = c.router({\n /**\n * GET /api/logs/search\n * Search agent events across runs using keyword matching\n */\n searchLogs: {\n method: \"GET\",\n path: \"/api/logs/search\",\n headers: authHeadersSchema,\n query: z.object({\n keyword: z.string().min(1),\n agent: z.string().optional(),\n runId: z.string().optional(),\n since: z.coerce.number().optional(),\n limit: z.coerce.number().min(1).max(50).default(20),\n before: z.coerce.number().min(0).max(10).default(0),\n after: z.coerce.number().min(0).max(10).default(0),\n }),\n responses: {\n 200: logsSearchResponseSchema,\n 401: apiErrorSchema,\n },\n summary: \"Search agent events across runs\",\n },\n});\n\nexport type LogsSearchContract = typeof logsSearchContract;\n\n/**\n * Queue entry schema — own entries have real data, others have null for private fields\n * Ownership is detected via runId: non-null = own entry, null = other user's entry\n */\nconst queueEntrySchema = z.object({\n position: z.number(),\n agentName: z.string().nullable(),\n agentDisplayName: z.string().nullable(),\n userEmail: z.string().nullable(),\n createdAt: z.string(),\n isOwner: z.boolean(),\n runId: z.string().nullable(),\n prompt: z.string().nullable(),\n triggerSource: triggerSourceSchema.nullable(),\n sessionLink: z.string().nullable(),\n});\n\n/**\n * Running task schema — shows currently executing runs\n */\nconst runningTaskSchema = z.object({\n runId: z.string().nullable(),\n agentName: z.string(),\n agentDisplayName: z.string().nullable(),\n userEmail: z.string(),\n startedAt: z.string().nullable(),\n isOwner: z.boolean(),\n});\n\n/**\n * Concurrency info schema\n */\nconst concurrencyInfoSchema = z.object({\n tier: orgTierSchema,\n limit: z.number(),\n active: z.number(),\n available: z.number(),\n});\n\n/**\n * Queue response schema\n */\nconst queueResponseSchema = z.object({\n concurrency: concurrencyInfoSchema,\n queue: z.array(queueEntrySchema),\n runningTasks: z.array(runningTaskSchema),\n estimatedTimePerRun: z.number().nullable(),\n});\n\n/**\n * Runs queue route contract (/api/agent/runs/queue)\n * Returns org-wide queue status with concurrency context\n */\nexport const runsQueueContract = c.router({\n /**\n * GET /api/agent/runs/queue\n * Get org run queue status including concurrency context and queued entries\n */\n getQueue: {\n method: \"GET\",\n path: \"/api/agent/runs/queue\",\n headers: authHeadersSchema,\n responses: {\n 200: queueResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"Get org run queue status\",\n },\n});\n\nexport type RunsQueueContract = typeof runsQueueContract;\n\n// Export schemas for reuse\nexport {\n runStatusSchema,\n unifiedRunRequestSchema,\n createRunResponseSchema,\n getRunResponseSchema,\n runListItemSchema,\n runsListResponseSchema,\n cancelRunResponseSchema,\n runEventSchema,\n runResultSchema,\n runStateSchema,\n eventsResponseSchema,\n telemetryMetricSchema,\n telemetryResponseSchema,\n systemLogResponseSchema,\n metricsResponseSchema,\n agentEventsResponseSchema,\n networkLogEntrySchema,\n networkLogsResponseSchema,\n searchResultSchema,\n logsSearchResponseSchema,\n queueEntrySchema,\n runningTaskSchema,\n concurrencyInfoSchema,\n queueResponseSchema,\n};\n\n// Export inferred types for consumers\nexport type RunStatus = z.infer<typeof runStatusSchema>;\nexport type RunResult = z.infer<typeof runResultSchema>;\nexport type RunState = z.infer<typeof runStateSchema>;\nexport type RunEvent = z.infer<typeof runEventSchema>;\nexport type CreateRunResponse = z.infer<typeof createRunResponseSchema>;\nexport type GetRunResponse = z.infer<typeof getRunResponseSchema>;\nexport type RunListItem = z.infer<typeof runListItemSchema>;\nexport type RunsListResponse = z.infer<typeof runsListResponseSchema>;\nexport type CancelRunResponse = z.infer<typeof cancelRunResponseSchema>;\nexport type EventsResponse = z.infer<typeof eventsResponseSchema>;\nexport type TelemetryMetric = z.infer<typeof telemetryMetricSchema>;\nexport type TelemetryResponse = z.infer<typeof telemetryResponseSchema>;\nexport type SystemLogResponse = z.infer<typeof systemLogResponseSchema>;\nexport type MetricsResponse = z.infer<typeof metricsResponseSchema>;\nexport type AgentEventsResponse = z.infer<typeof agentEventsResponseSchema>;\nexport type NetworkLogEntry = z.infer<typeof networkLogEntrySchema>;\nexport type NetworkLogsResponse = z.infer<typeof networkLogsResponseSchema>;\nexport type SearchResult = z.infer<typeof searchResultSchema>;\nexport type LogsSearchResponse = z.infer<typeof logsSearchResponseSchema>;\nexport type QueueEntry = z.infer<typeof queueEntrySchema>;\nexport type RunningTask = z.infer<typeof runningTaskSchema>;\nexport type ConcurrencyInfo = z.infer<typeof concurrencyInfoSchema>;\nexport type QueueResponse = z.infer<typeof queueResponseSchema>;\n","import { z } from \"zod\";\n\n/**\n * Proxy-side firewall configuration for token replacement.\n *\n * All firewall zod schemas are defined here as the single source of truth.\n * Other modules (composes.ts, runners.ts) import from here.\n *\n * Firewall configs are hosted in GitHub: vm0-ai/vm0-firewalls\n * See resolveFirewallSelections() in firewall-expander.ts for resolution logic.\n */\n\n/**\n * Firewall permission schema — a named permission group with matching rules.\n * Rules use the format `METHOD /path` where path is relative to the API entry's base URL.\n */\nexport const firewallPermissionSchema = z.object({\n name: z.string(),\n description: z.string().optional(),\n rules: z.array(z.string()),\n});\n\n/**\n * Firewall API entry — a base URL with auth headers and optional permissions.\n */\nexport const firewallApiSchema = z.object({\n base: z.string(),\n auth: z.object({\n headers: z.record(z.string(), z.string()),\n }),\n permissions: z.array(firewallPermissionSchema).optional(),\n});\n\n/**\n * A single firewall with its name, ref, and API entries.\n * Used in the expanded (post-compose) format.\n */\nexport const firewallSchema = z.object({\n name: z.string(),\n ref: z.string(),\n apis: z.array(firewallApiSchema),\n});\n\n/**\n * Experimental firewall configuration for proxy-side token replacement.\n * Flat array of firewall entries: [{ name, ref, apis }]\n */\nexport const experimentalFirewallsSchema = z.array(firewallSchema);\n\n/**\n * Zod schema for validating firewall config (GitHub-hosted YAML).\n */\nexport const firewallConfigSchema = z.object({\n name: z.string().min(1, \"Firewall name is required\"),\n description: z.string().optional(),\n apis: z\n .array(firewallApiSchema)\n .min(1, \"Firewall must have at least one API entry\"),\n placeholders: z.record(z.string(), z.string()).optional(),\n});\n\n/**\n * Firewall policy value — per-permission access control.\n * - \"allow\": always allow without prompting\n * - \"deny\": always deny\n * - \"ask\": prompt user for approval each time\n */\nexport const firewallPolicyValueSchema = z.enum([\"allow\", \"deny\", \"ask\"]);\nexport type FirewallPolicyValue = z.infer<typeof firewallPolicyValueSchema>;\n\n/**\n * Firewall policies — nested map of firewall ref → permission name → policy.\n * Example: { \"github\": { \"repo-read\": \"allow\", \"issues-write\": \"deny\" } }\n */\nexport const firewallPoliciesSchema = z.record(\n z.string(),\n z.record(z.string(), firewallPolicyValueSchema),\n);\nexport type FirewallPolicies = z.infer<typeof firewallPoliciesSchema>;\n\n/** Inferred types */\nexport type FirewallApi = z.infer<typeof firewallApiSchema>;\nexport type FirewallConfig = z.infer<typeof firewallConfigSchema>;\nexport type Firewall = z.infer<typeof firewallSchema>;\nexport type ExperimentalFirewalls = z.infer<typeof experimentalFirewallsSchema>;\n\n/**\n * Regex pattern matching `${{ secrets.XXX }}` references in auth header templates.\n * Tolerates optional whitespace inside braces: `${{ secrets.X }}` and `${{secrets.X}}`.\n */\nconst AUTH_SECRET_PATTERN =\n /\\$\\{\\{\\s*secrets\\.([a-zA-Z_][a-zA-Z0-9_]*)\\s*\\}\\}/g;\n\n/**\n * Extract all secret names referenced in firewall rule auth header templates.\n * E.g., `Bearer ${{ secrets.GITHUB_TOKEN }}` → `[\"GITHUB_TOKEN\"]`\n */\nexport function extractSecretNamesFromApis(\n apis: FirewallConfig[\"apis\"],\n): string[] {\n const names = new Set<string>();\n for (const entry of apis) {\n for (const value of Object.values(entry.auth.headers)) {\n for (const match of value.matchAll(AUTH_SECRET_PATTERN)) {\n names.add(match[1]!);\n }\n }\n }\n return [...names];\n}\n\n/**\n * Regex pattern matching `${{ vars.XXX }}` references in base URL templates.\n */\nconst BASE_URL_VARS_PATTERN = /\\$\\{\\{\\s*vars\\.([a-zA-Z_][a-zA-Z0-9_]*)\\s*\\}\\}/;\nconst BASE_URL_VARS_PATTERN_G = new RegExp(BASE_URL_VARS_PATTERN.source, \"g\");\n\n/**\n * Check if a base URL contains `${{ vars.X }}` template references.\n */\nexport function hasBaseUrlVars(base: string): boolean {\n return BASE_URL_VARS_PATTERN.test(base);\n}\n\n/**\n * Resolve `${{ vars.X }}` templates in firewall base URLs.\n * Returns a new array with all base URL templates replaced by actual values.\n * Throws if a referenced variable is not provided.\n */\nexport function resolveFirewallBaseUrlVars(\n firewalls: ExperimentalFirewalls,\n vars: Record<string, string> | undefined,\n): ExperimentalFirewalls {\n return firewalls.map((fw) => {\n return {\n ...fw,\n apis: fw.apis.map((api) => {\n if (!hasBaseUrlVars(api.base)) return api;\n const resolved = api.base.replace(\n BASE_URL_VARS_PATTERN_G,\n (_match, name: string) => {\n const value = vars?.[name];\n if (!value) {\n throw new Error(\n `Firewall \"${fw.name}\" base URL requires variable \"${name}\" but it was not provided`,\n );\n }\n return value;\n },\n );\n validateBaseUrl(resolved, fw.name);\n return { ...api, base: resolved };\n }),\n };\n });\n}\n\n/**\n * Pattern matching `{name}`, `{name+}`, or `{name*}` parameter segments.\n */\nconst PARAM_SEGMENT_PATTERN = /^\\{([^}]*)\\}$/;\n\n/**\n * Check if a base URL contains `{name}` style parameter placeholders\n * (as opposed to `${{ vars.X }}` template references).\n */\nexport function hasBaseUrlParams(base: string): boolean {\n // Strip ${{ ... }} template references, then check for remaining { }.\n // Uses string iteration instead of regex to avoid ReDoS risk.\n let stripped = base;\n let start = stripped.indexOf(\"${{\");\n while (start !== -1) {\n const end = stripped.indexOf(\"}}\", start + 3);\n if (end === -1) break;\n stripped = stripped.slice(0, start) + stripped.slice(end + 2);\n start = stripped.indexOf(\"${{\");\n }\n return stripped.includes(\"{\") && stripped.includes(\"}\");\n}\n\nfunction errMsg(base: string, svc: string, detail: string): string {\n return `Invalid base URL \"${base}\" in firewall \"${svc}\": ${detail}`;\n}\n\n/**\n * Validate host segments (`.`-delimited) for parameterized base URLs.\n * Greedy params (`+`/`*`) must be the first (leftmost) host segment.\n * At least one static segment is required for security.\n */\nfunction validateHostParams(\n segments: string[],\n paramNames: Set<string>,\n base: string,\n svc: string,\n): void {\n if (segments.length < 2) {\n throw new Error(errMsg(base, svc, \"host must have at least two segments\"));\n }\n let hasStatic = false;\n for (let i = 0; i < segments.length; i++) {\n const seg = segments[i]!;\n const match = PARAM_SEGMENT_PATTERN.exec(seg);\n if (!match) {\n if (seg.includes(\"{\") || seg.includes(\"}\")) {\n throw new Error(\n errMsg(\n base,\n svc,\n `host segment \"${seg}\" contains \"{\" or \"}\" but is not a valid parameter (use \"{name}\" for the full segment)`,\n ),\n );\n }\n hasStatic = true;\n continue;\n }\n const name = match[1]!;\n const isGreedy = name.endsWith(\"+\") || name.endsWith(\"*\");\n const baseName = isGreedy ? name.slice(0, -1) : name;\n if (!baseName) {\n throw new Error(errMsg(base, svc, \"empty parameter name in host\"));\n }\n if (paramNames.has(baseName)) {\n throw new Error(\n errMsg(base, svc, `duplicate parameter name \"{${baseName}}\" in host`),\n );\n }\n paramNames.add(baseName);\n if (isGreedy && i !== 0) {\n throw new Error(\n errMsg(base, svc, `{${name}} must be the first host segment`),\n );\n }\n }\n if (!hasStatic) {\n throw new Error(\n errMsg(base, svc, \"host must have at least one static segment\"),\n );\n }\n}\n\n/**\n * Validate path segments (`/`-delimited) for parameterized base URLs.\n * Only `{param}` is allowed — greedy params are rejected.\n */\nfunction validatePathParams(\n segments: string[],\n paramNames: Set<string>,\n base: string,\n svc: string,\n): void {\n for (const seg of segments) {\n const match = PARAM_SEGMENT_PATTERN.exec(seg);\n if (!match) {\n if (seg.includes(\"{\") || seg.includes(\"}\")) {\n throw new Error(\n errMsg(\n base,\n svc,\n `path segment \"${seg}\" contains \"{\" or \"}\" but is not a valid parameter (use \"{name}\" for the full segment)`,\n ),\n );\n }\n continue;\n }\n const name = match[1]!;\n if (!name) {\n throw new Error(errMsg(base, svc, \"empty parameter name in path\"));\n }\n if (name.endsWith(\"+\") || name.endsWith(\"*\")) {\n throw new Error(\n errMsg(\n base,\n svc,\n `greedy parameter {${name}} is not allowed in base URL path`,\n ),\n );\n }\n if (paramNames.has(name)) {\n throw new Error(\n errMsg(base, svc, `duplicate parameter name \"{${name}}\"`),\n );\n }\n paramNames.add(name);\n }\n}\n\n/**\n * Validate parameter segments in a firewall base URL.\n *\n * Host portion: `{param}`, `{param+}`, `{param*}` allowed.\n * - Greedy (`+`/`*`) must be in the leftmost (first) host segment.\n * - At least one static host segment is required for security.\n *\n * Path portion: only `{param}` (single-segment) allowed.\n * - Greedy (`+`/`*`) is rejected — it would consume the entire remaining\n * path, leaving nothing for permission rules to match against.\n */\nfunction validateBaseUrlParams(base: string, serviceName: string): void {\n const schemeEnd = base.indexOf(\"://\");\n if (schemeEnd === -1) {\n throw new Error(errMsg(base, serviceName, \"missing scheme\"));\n }\n if (base.slice(0, schemeEnd).includes(\"{\")) {\n throw new Error(\n errMsg(base, serviceName, \"scheme must not contain parameters\"),\n );\n }\n if (base.includes(\"?\")) {\n throw new Error(errMsg(base, serviceName, \"must not contain query string\"));\n }\n if (base.includes(\"#\")) {\n throw new Error(errMsg(base, serviceName, \"must not contain fragment\"));\n }\n\n const rest = base.slice(schemeEnd + 3);\n const slashIdx = rest.indexOf(\"/\");\n const host = slashIdx === -1 ? rest : rest.slice(0, slashIdx);\n const path = slashIdx === -1 ? \"\" : rest.slice(slashIdx);\n\n const paramNames = new Set<string>();\n validateHostParams(host.split(\".\"), paramNames, base, serviceName);\n if (path) {\n validatePathParams(\n path.split(\"/\").filter(Boolean),\n paramNames,\n base,\n serviceName,\n );\n }\n}\n\nexport function validateBaseUrl(base: string, serviceName: string): void {\n // Template base URLs are validated after variable resolution at compose time.\n if (hasBaseUrlVars(base)) return;\n\n // Parameterized base URLs have their own validation path.\n if (hasBaseUrlParams(base)) {\n validateBaseUrlParams(base, serviceName);\n return;\n }\n\n let url: URL;\n try {\n url = new URL(base);\n } catch {\n throw new Error(\n `Invalid base URL \"${base}\" in firewall \"${serviceName}\": not a valid URL`,\n );\n }\n if (url.search) {\n throw new Error(\n `Invalid base URL \"${base}\" in firewall \"${serviceName}\": must not contain query string`,\n );\n }\n if (url.hash) {\n throw new Error(\n `Invalid base URL \"${base}\" in firewall \"${serviceName}\": must not contain fragment`,\n );\n }\n}\n\n/**\n * Expanded firewall config stored in compose content.\n * Resolved from firewall name + FirewallConfig at compose time, then frozen.\n *\n * - `name`: firewall config name (e.g., \"slack\")\n * - `ref`: key used in vm0.yaml to reference this firewall config\n * - `description`: optional description from the firewall config\n */\nexport interface ExpandedFirewallConfig {\n name: string;\n ref: string;\n description?: string;\n apis: FirewallApi[];\n placeholders?: Record<string, string>;\n}\n","import { z } from \"zod\";\nimport { initContract, authHeadersSchema } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\n/**\n * Cursor-based pagination schema with total pages\n */\nexport const paginationSchema = z.object({\n hasMore: z.boolean(),\n nextCursor: z.string().nullable(),\n totalPages: z.number(),\n});\n\nexport type Pagination = z.infer<typeof paginationSchema>;\n\n/**\n * Common query parameters for list endpoints\n */\nconst listQuerySchema = z.object({\n cursor: z.string().optional(),\n limit: z.coerce.number().min(1).max(100).default(20),\n});\n\nconst c = initContract();\n\n/**\n * Run status enum for logs\n */\nconst logStatusSchema = z.enum([\n \"queued\",\n \"pending\",\n \"running\",\n \"completed\",\n \"failed\",\n \"timeout\",\n \"cancelled\",\n]);\n\n/**\n * Trigger source enum — how the run was initiated\n */\nexport const triggerSourceSchema = z.enum([\n \"schedule\",\n \"web\",\n \"slack\",\n \"email\",\n \"telegram\",\n \"github\",\n \"cli\",\n \"agent\",\n]);\n\nexport type TriggerSource = z.infer<typeof triggerSourceSchema>;\n\n/**\n * Log entry in list response - includes basic fields for list display\n */\nconst logEntrySchema = z.object({\n id: z.uuid(),\n sessionId: z.string().nullable(),\n agentId: z.string().nullable(),\n displayName: z.string().nullable(),\n orgSlug: z.string().nullable(),\n framework: z.string().nullable(),\n triggerSource: triggerSourceSchema.nullable(),\n triggerAgentName: z.string().nullable(),\n scheduleId: z.string().nullable(),\n status: logStatusSchema,\n createdAt: z.string(),\n startedAt: z.string().nullable(),\n completedAt: z.string().nullable(),\n});\n\n/**\n * Available filter values returned by the list endpoint\n */\nconst logsFiltersSchema = z.object({\n statuses: z.array(logStatusSchema),\n sources: z.array(triggerSourceSchema),\n agents: z.array(z.string()),\n});\n\nexport type LogsFilters = z.infer<typeof logsFiltersSchema>;\n\n/**\n * Logs list response schema with pagination\n */\nconst logsListResponseSchema = z.object({\n data: z.array(logEntrySchema),\n pagination: paginationSchema,\n filters: logsFiltersSchema,\n});\n\n/**\n * Artifact information schema\n */\nconst artifactSchema = z.object({\n name: z.string().nullable(),\n version: z.string().nullable(),\n});\n\n/**\n * Log detail response schema\n */\nconst logDetailSchema = z.object({\n id: z.uuid(),\n sessionId: z.string().nullable(),\n agentId: z.string().nullable(),\n displayName: z.string().nullable(),\n framework: z.string().nullable(),\n modelProvider: z.string().nullable(),\n selectedModel: z.string().nullable(),\n triggerSource: triggerSourceSchema.nullable(),\n triggerAgentName: z.string().nullable(),\n scheduleId: z.string().nullable(),\n status: logStatusSchema,\n prompt: z.string(),\n appendSystemPrompt: z.string().nullable(),\n error: z.string().nullable(),\n createdAt: z.string(),\n startedAt: z.string().nullable(),\n completedAt: z.string().nullable(),\n artifact: artifactSchema,\n});\n\n/**\n * Logs list contract\n * GET /api/zero/logs\n */\nexport const logsListContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/logs\",\n query: listQuerySchema.extend({\n search: z.string().optional(),\n agent: z.string().optional(),\n name: z.string().optional(),\n\n status: logStatusSchema.optional(),\n triggerSource: triggerSourceSchema.optional(),\n scheduleId: z.string().uuid().optional(),\n }),\n responses: {\n 200: logsListResponseSchema,\n 401: apiErrorSchema,\n },\n summary: \"List agent run logs with pagination\",\n },\n});\n\n/**\n * Logs by ID contract\n * GET /api/zero/logs/:id\n */\nexport const logsByIdContract = c.router({\n getById: {\n method: \"GET\",\n path: \"/api/zero/logs/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().uuid(\"Invalid log ID\"),\n }),\n responses: {\n 200: logDetailSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get agent run log details by ID\",\n },\n});\n\n// Contract type exports\nexport type LogsListContract = typeof logsListContract;\nexport type LogsByIdContract = typeof logsByIdContract;\n\n// Schema exports for reuse\nexport {\n logStatusSchema,\n logEntrySchema,\n logsListResponseSchema,\n artifactSchema,\n logDetailSchema,\n};\n\n// Inferred type exports\nexport type LogStatus = z.infer<typeof logStatusSchema>;\nexport type LogEntry = z.infer<typeof logEntrySchema>;\nexport type LogsListResponse = z.infer<typeof logsListResponseSchema>;\nexport type Artifact = z.infer<typeof artifactSchema>;\nexport type LogDetail = z.infer<typeof logDetailSchema>;\n","import { z } from \"zod\";\nimport { initContract, authHeadersSchema } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport { orgRoleSchema } from \"./org-members\";\n\nconst c = initContract();\n\n/**\n * Org tier values\n */\nexport const orgTierSchema = z.enum([\"free\", \"pro\", \"team\"]);\nexport type OrgTier = z.infer<typeof orgTierSchema>;\n\n/**\n * Org slug validation\n * - 3-64 characters (or 1-2 for single/double char slugs)\n * - lowercase letters, numbers, and hyphens only\n * - must start and end with alphanumeric\n */\nexport const orgSlugSchema = z\n .string()\n .min(3, \"Org slug must be at least 3 characters\")\n .max(64, \"Org slug must be at most 64 characters\")\n .regex(\n /^[a-z0-9][a-z0-9-]*[a-z0-9]$|^[a-z0-9]{1,2}$/,\n \"Org slug must contain only lowercase letters, numbers, and hyphens, and must start and end with an alphanumeric character\",\n )\n .transform((s) => {\n return s.toLowerCase();\n });\n\n/**\n * Org response schema\n */\nexport const orgResponseSchema = z.object({\n id: z.string(),\n slug: z.string(),\n name: z.string(),\n tier: z.string().optional(),\n role: orgRoleSchema.optional(),\n});\n\nexport type OrgResponse = z.infer<typeof orgResponseSchema>;\n\n/**\n * Update org request schema\n */\nexport const updateOrgRequestSchema = z.object({\n slug: orgSlugSchema.optional(),\n name: z.string().min(1).max(128).optional(),\n force: z.boolean().optional().default(false),\n});\n\nexport type UpdateOrgRequest = z.infer<typeof updateOrgRequestSchema>;\n\n/**\n * Org default agent contract for /api/zero/default-agent\n */\nexport const orgDefaultAgentContract = c.router({\n /**\n * PUT /api/zero/default-agent\n * Set or unset the default agent for an org.\n * Only org admins can perform this action.\n * The agent must belong to the same org.\n */\n setDefaultAgent: {\n method: \"PUT\",\n path: \"/api/zero/default-agent\",\n headers: authHeadersSchema,\n query: z.object({}),\n body: z.object({\n agentId: z.uuid().nullable(),\n }),\n responses: {\n 200: z.object({\n agentId: z.uuid().nullable(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Set or unset the default agent for an org\",\n },\n});\n\nexport type OrgDefaultAgentContract = typeof orgDefaultAgentContract;\n","import { z } from \"zod\";\n\n/**\n * Org role enum\n */\nexport const orgRoleSchema = z.enum([\"admin\", \"member\"]);\nexport type OrgRole = z.infer<typeof orgRoleSchema>;\n\n/**\n * Org member schema\n */\nexport const orgMemberSchema = z.object({\n userId: z.string(),\n email: z.string(),\n firstName: z.string().nullable(),\n lastName: z.string().nullable(),\n imageUrl: z.string(),\n role: orgRoleSchema,\n joinedAt: z.string(),\n});\nexport type OrgMember = z.infer<typeof orgMemberSchema>;\n\n/**\n * Pending invitation schema\n */\nexport const orgPendingInvitationSchema = z.object({\n id: z.string(),\n email: z.string(),\n role: orgRoleSchema,\n createdAt: z.string(),\n});\nexport type OrgPendingInvitation = z.infer<typeof orgPendingInvitationSchema>;\n\n/**\n * Membership request schema\n */\nexport const orgMembershipRequestSchema = z.object({\n id: z.string(),\n userId: z.string(),\n email: z.string(),\n firstName: z.string().nullable(),\n lastName: z.string().nullable(),\n imageUrl: z.string(),\n createdAt: z.string(),\n});\nexport type OrgMembershipRequest = z.infer<typeof orgMembershipRequestSchema>;\n\n/**\n * Revoke invitation request schema\n */\nexport const revokeInvitationRequestSchema = z.object({\n invitationId: z.string(),\n});\nexport type RevokeInvitationRequest = z.infer<\n typeof revokeInvitationRequestSchema\n>;\n\n/**\n * Membership request action schema\n */\nexport const membershipRequestActionSchema = z.object({\n requestId: z.string(),\n});\nexport type MembershipRequestAction = z.infer<\n typeof membershipRequestActionSchema\n>;\n\n/**\n * Org members response schema (status + members list)\n */\nexport const orgMembersResponseSchema = z.object({\n slug: z.string(),\n role: orgRoleSchema,\n members: z.array(orgMemberSchema),\n pendingInvitations: z.array(orgPendingInvitationSchema).optional(),\n membershipRequests: z.array(orgMembershipRequestSchema).optional(),\n createdAt: z.string(),\n});\nexport type OrgMembersResponse = z.infer<typeof orgMembersResponseSchema>;\n\n/**\n * Invite member request schema\n */\nexport const inviteOrgMemberRequestSchema = z.object({\n email: z.string().email(),\n});\nexport type InviteOrgMemberRequest = z.infer<\n typeof inviteOrgMemberRequestSchema\n>;\n\n/**\n * Remove member request schema\n */\nexport const removeOrgMemberRequestSchema = z.object({\n email: z.string().email(),\n});\nexport type RemoveOrgMemberRequest = z.infer<\n typeof removeOrgMemberRequestSchema\n>;\n\n/**\n * Update member role request schema\n */\nexport const updateOrgMemberRoleRequestSchema = z.object({\n email: z.string().email(),\n role: orgRoleSchema,\n});\nexport type UpdateOrgMemberRoleRequest = z.infer<\n typeof updateOrgMemberRoleRequestSchema\n>;\n\n/**\n * Org domain schema\n */\nexport const orgDomainSchema = z.object({\n id: z.string(),\n name: z.string(),\n enrollmentMode: z.string(),\n verification: z.object({\n status: z.string(),\n strategy: z.string(),\n }),\n createdAt: z.string(),\n});\nexport type OrgDomain = z.infer<typeof orgDomainSchema>;\n\n/**\n * Org domains response schema\n */\nexport const orgDomainsResponseSchema = z.object({\n domains: z.array(orgDomainSchema),\n});\nexport type OrgDomainsResponse = z.infer<typeof orgDomainsResponseSchema>;\n\n/**\n * Add domain request schema\n */\nconst orgEnrollmentModeSchema = z.enum([\n \"manual_invitation\",\n \"automatic_invitation\",\n \"automatic_suggestion\",\n]);\nexport type OrgEnrollmentMode = z.infer<typeof orgEnrollmentModeSchema>;\n\nexport const addDomainRequestSchema = z.object({\n name: z.string(),\n enrollmentMode: orgEnrollmentModeSchema,\n});\nexport type AddDomainRequest = z.infer<typeof addDomainRequestSchema>;\n\n/**\n * Domain action request schema (for delete)\n */\nexport const domainActionRequestSchema = z.object({\n domainId: z.string(),\n});\nexport type DomainActionRequest = z.infer<typeof domainActionRequestSchema>;\n\n/**\n * Domain verify/unverify request schema\n */\nexport const domainVerifyRequestSchema = z.object({\n domainId: z.string(),\n verified: z.boolean(),\n});\nexport type DomainVerifyRequest = z.infer<typeof domainVerifyRequestSchema>;\n\n/**\n * Simple message response schema\n */\nexport const orgMessageResponseSchema = z.object({\n message: z.string(),\n});\nexport type OrgMessageResponse = z.infer<typeof orgMessageResponseSchema>;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\n/**\n * Storage type enum\n */\nconst storageTypeSchema = z.enum([\"volume\", \"artifact\", \"memory\"]);\n\n/**\n * Version ID query parameter schema\n *\n * Validates hex format (8-64 characters). Used for version prefix resolution.\n */\nconst versionQuerySchema = z\n .string()\n .regex(/^[a-f0-9]{8,64}$/i, \"Version must be 8-64 hex characters\")\n .optional();\n\n/**\n * Upload storage response schema (JSON part of POST response)\n */\nconst uploadStorageResponseSchema = z.object({\n name: z.string(),\n versionId: z.string(),\n size: z.number(),\n fileCount: z.number(),\n type: storageTypeSchema,\n deduplicated: z.boolean(),\n});\n\n/**\n * Storages contract for /api/storages\n *\n * Note: This API handles binary file upload/download:\n * - POST: Multipart form data upload, returns JSON\n * - GET: Query params, returns binary tar.gz file\n *\n * The contract defines the JSON parts for type safety.\n * Binary response handling is done at the route level.\n */\nexport const storagesContract = c.router({\n /**\n * POST /api/storages\n * Upload a storage (tar.gz file)\n *\n * Content-Type: multipart/form-data\n * Form fields:\n * - name: string (storage name, 3-64 chars, lowercase alphanumeric with hyphens)\n * - file: File (tar.gz archive)\n * - type: \"volume\" | \"artifact\" (optional, defaults to \"volume\")\n * - force: \"true\" | \"false\" (optional, skip deduplication)\n */\n upload: {\n method: \"POST\",\n path: \"/api/storages\",\n headers: authHeadersSchema,\n contentType: \"multipart/form-data\",\n body: c.type<FormData>(),\n responses: {\n 200: uploadStorageResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Upload storage archive\",\n },\n\n /**\n * GET /api/storages\n * Download a storage as tar.gz file\n *\n * Query params:\n * - name: string (required, storage name)\n * - version: string (optional, version ID or prefix)\n *\n * Returns: Binary tar.gz file (application/gzip)\n */\n download: {\n method: \"GET\",\n path: \"/api/storages\",\n headers: authHeadersSchema,\n query: z.object({\n name: z.string().min(1, \"Storage name is required\"),\n version: versionQuerySchema,\n }),\n responses: {\n // Binary response - actual handling done at route level\n 200: c.otherResponse({\n contentType: \"application/gzip\",\n body: c.type<Blob>(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Download storage archive\",\n },\n});\n\nexport type StoragesContract = typeof storagesContract;\n\n// ============================================================================\n// Direct Upload Schemas (for CLI and Webhook endpoints)\n// ============================================================================\n\n/**\n * Maximum file size per file in bytes (100MB)\n */\nexport const MAX_FILE_SIZE_BYTES = 104_857_600;\n\n/**\n * File entry with hash for content-addressable storage\n */\nexport const fileEntryWithHashSchema = z.object({\n path: z.string().min(1, \"File path is required\"),\n hash: z.string().length(64, \"Hash must be SHA-256 (64 hex chars)\"),\n size: z\n .number()\n .int()\n .min(0, \"Size must be non-negative\")\n .max(MAX_FILE_SIZE_BYTES, \"File size exceeds 100MB limit\"),\n});\n\n/**\n * Incremental changes schema for partial uploads\n */\nexport const storageChangesSchema = z.object({\n added: z.array(z.string()),\n modified: z.array(z.string()),\n deleted: z.array(z.string()),\n});\n\n/**\n * Presigned upload URL schema\n */\nexport const presignedUploadSchema = z.object({\n key: z.string(),\n presignedUrl: z.url(),\n});\n\n// ============================================================================\n// Direct Upload Contracts (CLI endpoints)\n// ============================================================================\n\n/**\n * Storage prepare contract for /api/storages/prepare\n *\n * Prepares for direct S3 upload by:\n * 1. Computing content hash from file metadata\n * 2. Checking for existing version (deduplication)\n * 3. Generating presigned URLs if upload needed\n */\nexport const storagesPrepareContract = c.router({\n prepare: {\n method: \"POST\",\n path: \"/api/storages/prepare\",\n headers: authHeadersSchema,\n body: z.object({\n storageName: z.string().min(1, \"Storage name is required\"),\n storageType: storageTypeSchema,\n files: z.array(fileEntryWithHashSchema),\n force: z.boolean().optional(),\n runId: z.string().optional(), // For sandbox auth\n baseVersion: z.string().optional(), // For incremental uploads\n changes: storageChangesSchema.optional(),\n }),\n responses: {\n 200: z.object({\n versionId: z.string(),\n existing: z.boolean(),\n uploads: z\n .object({\n archive: presignedUploadSchema,\n manifest: presignedUploadSchema,\n })\n .optional(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 413: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Prepare for direct S3 upload\",\n },\n});\n\n/**\n * Storage commit contract for /api/storages/commit\n *\n * Commits a direct S3 upload by:\n * 1. Verifying uploaded files exist in S3\n * 2. Creating storage version record\n * 3. Updating storage HEAD pointer\n */\nexport const storagesCommitContract = c.router({\n commit: {\n method: \"POST\",\n path: \"/api/storages/commit\",\n headers: authHeadersSchema,\n body: z.object({\n storageName: z.string().min(1, \"Storage name is required\"),\n storageType: storageTypeSchema,\n versionId: z.string().min(1, \"Version ID is required\"),\n files: z.array(fileEntryWithHashSchema),\n runId: z.string().optional(),\n message: z.string().optional(),\n }),\n responses: {\n 200: z.object({\n success: z.literal(true),\n versionId: z.string(),\n storageName: z.string(),\n size: z.number(),\n fileCount: z.number(),\n deduplicated: z.boolean().optional(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema, // S3 files missing\n 413: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Commit uploaded storage\",\n },\n});\n\n/**\n * Storage download contract for /api/storages/download\n *\n * Returns presigned URL for downloading storage archive from S3.\n * Different from storagesContract.download which streams the file directly.\n */\nexport const storagesDownloadContract = c.router({\n download: {\n method: \"GET\",\n path: \"/api/storages/download\",\n headers: authHeadersSchema,\n query: z.object({\n name: z.string().min(1, \"Storage name is required\"),\n type: storageTypeSchema,\n version: versionQuerySchema,\n }),\n responses: {\n // Normal response with presigned URL\n 200: z.union([\n z.object({\n url: z.url(),\n versionId: z.string(),\n fileCount: z.number(),\n size: z.number(),\n }),\n // Empty artifact response\n z.object({\n empty: z.literal(true),\n versionId: z.string(),\n fileCount: z.literal(0),\n size: z.literal(0),\n }),\n ]),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Get presigned download URL\",\n },\n});\n\n/**\n * Storage list contract for /api/storages/list\n *\n * Lists all storages for the authenticated user, filtered by type.\n */\nexport const storagesListContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/storages/list\",\n headers: authHeadersSchema,\n query: z.object({\n type: storageTypeSchema,\n }),\n responses: {\n 200: z.array(\n z.object({\n name: z.string(),\n size: z.number(),\n fileCount: z.number(),\n updatedAt: z.string(),\n }),\n ),\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"List user storages by type\",\n },\n});\n\nexport type StoragesPrepareContract = typeof storagesPrepareContract;\nexport type StoragesCommitContract = typeof storagesCommitContract;\nexport type StoragesDownloadContract = typeof storagesDownloadContract;\nexport type StoragesListContract = typeof storagesListContract;\n\n// Export schemas for reuse\nexport { storageTypeSchema, uploadStorageResponseSchema };\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport {\n storageTypeSchema,\n fileEntryWithHashSchema,\n storageChangesSchema,\n presignedUploadSchema,\n} from \"./storages\";\n\nconst c = initContract();\n\n/**\n * Agent event schema for webhook events\n * Note: Claude Code JSONL events have varying structures with different fields\n * depending on the event type (system, assistant, user, result, etc.)\n * We require `type` and `sequenceNumber`, and allow any other fields to pass through\n */\nconst agentEventSchema = z\n .object({\n type: z.string(),\n sequenceNumber: z.number().int().nonnegative(),\n })\n .passthrough();\n\n/**\n * Artifact snapshot schema\n */\nconst artifactSnapshotSchema = z.object({\n artifactName: z.string(),\n artifactVersion: z.string(),\n});\n\n/**\n * Memory snapshot schema\n */\nconst memorySnapshotSchema = z.object({\n memoryName: z.string(),\n memoryVersion: z.string(),\n});\n\n/**\n * Volume versions snapshot schema\n */\nconst volumeVersionsSnapshotSchema = z.object({\n versions: z.record(z.string(), z.string()),\n});\n\n/**\n * Webhook events contract for /api/webhooks/agent/events\n */\nexport const webhookEventsContract = c.router({\n /**\n * POST /api/webhooks/agent/events\n * Receive agent events from sandbox\n */\n send: {\n method: \"POST\",\n path: \"/api/webhooks/agent/events\",\n headers: authHeadersSchema,\n body: z.object({\n runId: z.string().min(1, \"runId is required\"),\n events: z.array(agentEventSchema).min(1, \"events array cannot be empty\"),\n }),\n responses: {\n 200: z.object({\n received: z.number(),\n firstSequence: z.number(),\n lastSequence: z.number(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Receive agent events from sandbox\",\n },\n});\n\n/**\n * Webhook complete contract for /api/webhooks/agent/complete\n */\nexport const webhookCompleteContract = c.router({\n /**\n * POST /api/webhooks/agent/complete\n * Handle agent run completion (success or failure)\n */\n complete: {\n method: \"POST\",\n path: \"/api/webhooks/agent/complete\",\n headers: authHeadersSchema,\n body: z.object({\n runId: z.string().min(1, \"runId is required\"),\n exitCode: z.number(),\n error: z.string().optional(),\n }),\n responses: {\n 200: z.object({\n success: z.boolean(),\n status: z.enum([\"completed\", \"failed\"]),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Handle agent run completion\",\n },\n});\n\n/**\n * Webhook checkpoints contract for /api/webhooks/agent/checkpoints\n */\nexport const webhookCheckpointsContract = c.router({\n /**\n * POST /api/webhooks/agent/checkpoints\n * Create checkpoint for completed agent run\n */\n create: {\n method: \"POST\",\n path: \"/api/webhooks/agent/checkpoints\",\n headers: authHeadersSchema,\n body: z.object({\n runId: z.string().min(1, \"runId is required\"),\n cliAgentType: z.string().min(1, \"cliAgentType is required\"),\n cliAgentSessionId: z.string().min(1, \"cliAgentSessionId is required\"),\n cliAgentSessionHistory: z\n .string()\n .min(1, \"cliAgentSessionHistory is required\"),\n artifactSnapshot: artifactSnapshotSchema.optional(),\n memorySnapshot: memorySnapshotSchema.optional(),\n volumeVersionsSnapshot: volumeVersionsSnapshotSchema.optional(),\n }),\n responses: {\n 200: z.object({\n checkpointId: z.string(),\n agentSessionId: z.string(),\n conversationId: z.string(),\n artifact: artifactSnapshotSchema.optional(),\n memory: memorySnapshotSchema.optional(),\n volumes: z.record(z.string(), z.string()).optional(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Create checkpoint for agent run\",\n },\n});\n\n/**\n * Webhook heartbeat contract for /api/webhooks/agent/heartbeat\n */\nexport const webhookHeartbeatContract = c.router({\n /**\n * POST /api/webhooks/agent/heartbeat\n * Receive heartbeat signals from sandbox\n */\n send: {\n method: \"POST\",\n path: \"/api/webhooks/agent/heartbeat\",\n headers: authHeadersSchema,\n body: z.object({\n runId: z.string().min(1, \"runId is required\"),\n }),\n responses: {\n 200: z.object({\n ok: z.boolean(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Receive heartbeat from sandbox\",\n },\n});\n\n/**\n * Webhook storages contract for /api/webhooks/agent/storages\n * Note: This endpoint handles multipart form data upload\n * The contract defines the JSON response schema\n */\nexport const webhookStoragesContract = c.router({\n /**\n * POST /api/webhooks/agent/storages\n * Create a new version of a storage from sandbox\n *\n * Form fields:\n * - runId: string (required)\n * - storageName: string (required)\n * - message: string (optional)\n * - file: File (required, tar.gz archive)\n */\n upload: {\n method: \"POST\",\n path: \"/api/webhooks/agent/storages\",\n headers: authHeadersSchema,\n contentType: \"multipart/form-data\",\n body: c.type<FormData>(),\n responses: {\n 200: z.object({\n versionId: z.string(),\n storageName: z.string(),\n size: z.number(),\n fileCount: z.number(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Upload storage version from sandbox\",\n },\n});\n\n/**\n * Webhook storages incremental contract for /api/webhooks/agent/storages/incremental\n * Note: This endpoint handles multipart form data upload\n */\nexport const webhookStoragesIncrementalContract = c.router({\n /**\n * POST /api/webhooks/agent/storages/incremental\n * Create a new version using incremental upload\n *\n * Form fields:\n * - runId: string (required)\n * - storageName: string (required)\n * - baseVersion: string (required)\n * - changes: JSON string (required)\n * - message: string (optional)\n * - file: File (optional, tar.gz of changed files)\n */\n upload: {\n method: \"POST\",\n path: \"/api/webhooks/agent/storages/incremental\",\n headers: authHeadersSchema,\n contentType: \"multipart/form-data\",\n body: c.type<FormData>(),\n responses: {\n 200: z.object({\n versionId: z.string(),\n storageName: z.string(),\n size: z.number(),\n fileCount: z.number(),\n incrementalStats: z\n .object({\n addedFiles: z.number(),\n modifiedFiles: z.number(),\n deletedFiles: z.number(),\n unchangedFiles: z.number(),\n bytesUploaded: z.number(),\n })\n .optional(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Upload storage version incrementally from sandbox\",\n },\n});\n\n/**\n * Metric data point schema\n */\nconst metricDataSchema = z.object({\n ts: z.string(),\n cpu: z.number(),\n mem_used: z.number(),\n mem_total: z.number(),\n disk_used: z.number(),\n disk_total: z.number(),\n});\n\n/**\n * Sandbox operation schema for internal sandbox operations (init, storage, cli, checkpoint, cleanup)\n */\nconst sandboxOperationSchema = z.object({\n ts: z.string(),\n action_type: z.string(),\n duration_ms: z.number(),\n success: z.boolean(),\n error: z.string().optional(),\n});\n\n/**\n * Network log entry schema (from mitmproxy addon)\n * [NETWORK_LOG_FIELDS] — keep in sync with all network log schemas\n */\nconst networkLogSchema = z.object({\n timestamp: z.string(),\n type: z.string().optional(),\n action: z.enum([\"ALLOW\", \"DENY\"]).optional(),\n host: z.string().optional(),\n port: z.number().optional(),\n method: z.string().optional(),\n url: z.string().optional(),\n status: z.number().optional(),\n latency_ms: z.number().optional(),\n request_size: z.number().optional(),\n response_size: z.number().optional(),\n firewall_base: z.string().optional(),\n firewall_name: z.string().optional(),\n firewall_ref: z.string().optional(),\n firewall_permission: z.string().optional(),\n firewall_rule_match: z.string().optional(),\n firewall_params: z.record(z.string(), z.string()).optional(),\n firewall_error: z.string().optional(),\n token_resolved_secrets: z.array(z.string()).optional(),\n token_refreshed_connectors: z.array(z.string()).optional(),\n token_refreshed_secrets: z.array(z.string()).optional(),\n token_cache_hit: z.boolean().optional(),\n error: z.string().optional(),\n});\n\n/**\n * Webhook telemetry contract for /api/webhooks/agent/telemetry\n */\nexport const webhookTelemetryContract = c.router({\n /**\n * POST /api/webhooks/agent/telemetry\n * Receive telemetry data (system log, metrics, network logs, and sandbox operations) from sandbox\n */\n send: {\n method: \"POST\",\n path: \"/api/webhooks/agent/telemetry\",\n headers: authHeadersSchema,\n body: z.object({\n runId: z.string().min(1, \"runId is required\"),\n systemLog: z.string().optional(),\n metrics: z.array(metricDataSchema).optional(),\n networkLogs: z.array(networkLogSchema).optional(),\n sandboxOperations: z.array(sandboxOperationSchema).optional(),\n }),\n responses: {\n 200: z.object({\n success: z.boolean(),\n id: z.string(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Receive telemetry data from sandbox\",\n },\n});\n\n// ============================================================================\n// Direct Upload Contracts (Webhook endpoints for sandbox)\n// ============================================================================\n\n/**\n * Webhook storage prepare contract for /api/webhooks/agent/storages/prepare\n *\n * Sandbox version of storage prepare endpoint.\n * Uses JWT sandbox token authentication and verifies runId matches token.\n */\nexport const webhookStoragesPrepareContract = c.router({\n prepare: {\n method: \"POST\",\n path: \"/api/webhooks/agent/storages/prepare\",\n headers: authHeadersSchema,\n body: z.object({\n runId: z.string().min(1, \"runId is required\"), // Required for webhook auth\n storageName: z.string().min(1, \"Storage name is required\"),\n storageType: storageTypeSchema,\n files: z.array(fileEntryWithHashSchema),\n parentVersionId: z.string().optional(),\n force: z.boolean().optional(),\n baseVersion: z.string().optional(),\n changes: storageChangesSchema.optional(),\n }),\n responses: {\n 200: z.object({\n versionId: z.string(),\n existing: z.boolean(),\n uploads: z\n .object({\n archive: presignedUploadSchema,\n manifest: presignedUploadSchema,\n })\n .optional(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 413: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Prepare for direct S3 upload from sandbox\",\n },\n});\n\n/**\n * Webhook storage commit contract for /api/webhooks/agent/storages/commit\n *\n * Sandbox version of storage commit endpoint.\n * Uses JWT sandbox token authentication and verifies runId matches token.\n */\nexport const webhookStoragesCommitContract = c.router({\n commit: {\n method: \"POST\",\n path: \"/api/webhooks/agent/storages/commit\",\n headers: authHeadersSchema,\n body: z.object({\n runId: z.string().min(1, \"runId is required\"), // Required for webhook auth\n storageName: z.string().min(1, \"Storage name is required\"),\n storageType: storageTypeSchema,\n versionId: z.string().min(1, \"Version ID is required\"),\n parentVersionId: z.string().optional(),\n files: z.array(fileEntryWithHashSchema),\n message: z.string().optional(),\n }),\n responses: {\n 200: z.object({\n success: z.literal(true),\n versionId: z.string(),\n storageName: z.string(),\n size: z.number(),\n fileCount: z.number(),\n deduplicated: z.boolean().optional(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema, // S3 files missing\n 413: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Commit uploaded storage from sandbox\",\n },\n});\n\nexport type WebhookEventsContract = typeof webhookEventsContract;\nexport type WebhookCompleteContract = typeof webhookCompleteContract;\nexport type WebhookCheckpointsContract = typeof webhookCheckpointsContract;\nexport type WebhookHeartbeatContract = typeof webhookHeartbeatContract;\nexport type WebhookStoragesContract = typeof webhookStoragesContract;\nexport type WebhookStoragesIncrementalContract =\n typeof webhookStoragesIncrementalContract;\nexport type WebhookTelemetryContract = typeof webhookTelemetryContract;\nexport type WebhookStoragesPrepareContract =\n typeof webhookStoragesPrepareContract;\nexport type WebhookStoragesCommitContract =\n typeof webhookStoragesCommitContract;\n","import { z } from \"zod\";\nimport { initContract, authHeadersSchema } from \"./base\";\n\nconst c = initContract();\n\n/**\n * OAuth-style error response schema for device flow\n * Uses standard OAuth 2.0 error format\n */\nconst oauthErrorSchema = z.object({\n error: z.string(),\n error_description: z.string(),\n});\n\n/**\n * CLI auth device contract for /api/cli/auth/device\n */\nexport const cliAuthDeviceContract = c.router({\n /**\n * POST /api/cli/auth/device\n * Initiate device authorization flow\n */\n create: {\n method: \"POST\",\n path: \"/api/cli/auth/device\",\n body: z.object({}).optional(),\n responses: {\n 200: z.object({\n device_code: z.string(),\n user_code: z.string(),\n verification_path: z.string(),\n expires_in: z.number(),\n interval: z.number(),\n }),\n 500: oauthErrorSchema,\n },\n summary: \"Initiate device authorization flow\",\n },\n});\n\n/**\n * CLI auth token contract for /api/cli/auth/token\n */\nexport const cliAuthTokenContract = c.router({\n /**\n * POST /api/cli/auth/token\n * Exchange device code for access token\n */\n exchange: {\n method: \"POST\",\n path: \"/api/cli/auth/token\",\n body: z.object({\n device_code: z.string().min(1, \"device_code is required\"),\n }),\n responses: {\n // Success - token issued\n 200: z.object({\n access_token: z.string(),\n token_type: z.literal(\"Bearer\"),\n expires_in: z.number(),\n org_slug: z.string().optional(),\n }),\n // Authorization pending\n 202: oauthErrorSchema,\n // Various error states\n 400: oauthErrorSchema,\n 500: oauthErrorSchema,\n },\n summary: \"Exchange device code for access token\",\n },\n});\n\n/**\n * Error response schema for structured API errors\n */\nconst apiErrorResponseSchema = z.object({\n error: z.object({ message: z.string(), code: z.string() }),\n});\n\n/**\n * CLI auth org switch contract for /api/cli/auth/org\n */\nexport const cliAuthOrgContract = c.router({\n /**\n * POST /api/cli/auth/org\n * Switch active organization and get new CLI JWT\n */\n switchOrg: {\n method: \"POST\",\n path: \"/api/cli/auth/org\",\n headers: authHeadersSchema,\n body: z.object({ slug: z.string().min(1) }),\n responses: {\n 200: z.object({\n access_token: z.string(),\n token_type: z.literal(\"Bearer\"),\n expires_in: z.number(),\n org_slug: z.string(),\n }),\n 400: oauthErrorSchema,\n 401: apiErrorResponseSchema,\n 403: apiErrorResponseSchema,\n 404: apiErrorResponseSchema,\n },\n summary: \"Switch active organization and get new CLI JWT\",\n },\n});\n\nexport type CliAuthDeviceContract = typeof cliAuthDeviceContract;\nexport type CliAuthTokenContract = typeof cliAuthTokenContract;\nexport type CliAuthOrgContract = typeof cliAuthOrgContract;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\n/**\n * Auth contract for /api/auth/me\n */\nexport const authContract = c.router({\n /**\n * GET /api/auth/me\n * Get current user information\n */\n me: {\n method: \"GET\",\n path: \"/api/auth/me\",\n headers: authHeadersSchema,\n responses: {\n 200: z.object({\n userId: z.string(),\n email: z.string(),\n }),\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Get current user information\",\n },\n});\n\nexport type AuthContract = typeof authContract;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\n/**\n * Cleanup result schema\n */\nconst cleanupResultSchema = z.object({\n runId: z.string(),\n sandboxId: z.string().nullable(),\n status: z.enum([\"cleaned\", \"error\"]),\n error: z.string().optional(),\n reason: z.string().optional(),\n});\n\n/**\n * Cleanup response schema\n */\nconst cleanupResponseSchema = z.object({\n cleaned: z.number(),\n errors: z.number(),\n results: z.array(cleanupResultSchema),\n});\n\n/**\n * Cron cleanup sandboxes contract for /api/cron/cleanup-sandboxes\n */\nexport const cronCleanupSandboxesContract = c.router({\n /**\n * GET /api/cron/cleanup-sandboxes\n * Cron job to cleanup sandboxes that have stopped sending heartbeats\n */\n cleanup: {\n method: \"GET\",\n path: \"/api/cron/cleanup-sandboxes\",\n headers: authHeadersSchema,\n responses: {\n 200: cleanupResponseSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Cleanup expired sandboxes\",\n },\n});\n\nexport type CronCleanupSandboxesContract = typeof cronCleanupSandboxesContract;\n\n// Export schemas for reuse\nexport { cleanupResultSchema, cleanupResponseSchema };\n","import { z } from \"zod\";\n\n/**\n * Secret name validation\n * Rules:\n * - 1-255 characters\n * - uppercase letters, numbers, and underscores only\n * - must start with a letter\n * Examples: MY_API_KEY, GITHUB_TOKEN, AWS_ACCESS_KEY_ID\n */\nexport const secretNameSchema = z\n .string()\n .min(1, \"Secret name is required\")\n .max(255, \"Secret name must be at most 255 characters\")\n .regex(\n /^[A-Z][A-Z0-9_]*$/,\n \"Secret name must contain only uppercase letters, numbers, and underscores, and must start with a letter (e.g., MY_API_KEY)\",\n );\n\n/**\n * Secret type schema\n */\nexport const secretTypeSchema = z.enum([\"user\", \"model-provider\", \"connector\"]);\n\nexport type SecretType = z.infer<typeof secretTypeSchema>;\n\n/**\n * Secret metadata response (value is never returned)\n */\nexport const secretResponseSchema = z.object({\n id: z.uuid(),\n name: z.string(),\n description: z.string().nullable(),\n type: secretTypeSchema,\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport type SecretResponse = z.infer<typeof secretResponseSchema>;\n\n/**\n * List secrets response\n */\nexport const secretListResponseSchema = z.object({\n secrets: z.array(secretResponseSchema),\n});\n\nexport type SecretListResponse = z.infer<typeof secretListResponseSchema>;\n\n/**\n * Set secret request (create or update)\n */\nexport const setSecretRequestSchema = z.object({\n name: secretNameSchema,\n value: z.string().min(1, \"Secret value is required\"),\n description: z.string().max(1000).optional(),\n});\n\nexport type SetSecretRequest = z.infer<typeof setSecretRequestSchema>;\n","import { z } from \"zod\";\n\n/**\n * Variable name validation\n * Rules:\n * - 1-255 characters\n * - uppercase letters, numbers, and underscores only\n * - must start with a letter\n * Examples: MY_VAR, API_URL, DEBUG_MODE\n */\nexport const variableNameSchema = z\n .string()\n .min(1, \"Variable name is required\")\n .max(255, \"Variable name must be at most 255 characters\")\n .regex(\n /^[A-Z][A-Z0-9_]*$/,\n \"Variable name must contain only uppercase letters, numbers, and underscores, and must start with a letter (e.g., MY_VAR)\",\n );\n\n/**\n * Variable response (includes value - key difference from secrets)\n */\nexport const variableResponseSchema = z.object({\n id: z.uuid(),\n name: z.string(),\n value: z.string(),\n description: z.string().nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport type VariableResponse = z.infer<typeof variableResponseSchema>;\n\n/**\n * List variables response\n */\nexport const variableListResponseSchema = z.object({\n variables: z.array(variableResponseSchema),\n});\n\nexport type VariableListResponse = z.infer<typeof variableListResponseSchema>;\n\n/**\n * Set variable request (create or update)\n */\nexport const setVariableRequestSchema = z.object({\n name: variableNameSchema,\n value: z.string().min(1, \"Variable value is required\"),\n description: z.string().max(1000).optional(),\n});\n\nexport type SetVariableRequest = z.infer<typeof setVariableRequestSchema>;\n","import { z } from \"zod\";\n\nimport type { ExpandedFirewallConfig } from \"./firewalls\";\n\n/**\n * Secret field configuration for multi-secret providers\n */\nexport interface SecretFieldConfig {\n label: string;\n required: boolean;\n placeholder?: string;\n helpText?: string;\n}\n\n/**\n * Auth method configuration for providers with multiple auth options\n */\nexport interface AuthMethodConfig {\n label: string;\n helpText?: string;\n secrets: Record<string, SecretFieldConfig>;\n}\n\n/**\n * The org slug authorized to use the VM0 managed provider.\n */\nexport const VM0_ORG_SLUG = \"vm0\";\n\n/**\n * Mapping from VM0 managed model names to their concrete provider type and vendor.\n * Used at build-context time to resolve the meta-provider to a real provider.\n *\n * NOTE: Defined before MODEL_PROVIDER_TYPES so the vm0 entry can derive its\n * models list from this mapping via Object.keys().\n */\nexport const VM0_MODEL_TO_PROVIDER: Record<\n string,\n { concreteType: string; vendor: string }\n> = {\n \"claude-sonnet-4.6\": {\n concreteType: \"anthropic-api-key\",\n vendor: \"anthropic\",\n },\n \"claude-opus-4.6\": {\n concreteType: \"anthropic-api-key\",\n vendor: \"anthropic\",\n },\n};\n\n/**\n * Model Provider type configuration\n * Maps type to framework, secret name, and display info\n *\n * For providers with `environmentMapping`, the secret is mapped to framework variables:\n * - `$secret` → the stored secret value (legacy single secret)\n * - `$secrets.X` → lookup secret X from the secrets map (multi-secret)\n * - `$model` → the selected model (or default)\n * - Other values are passed through as literals\n *\n * Provider types:\n * - Legacy providers: use `secretName` for single secret\n * - Multi-auth providers: use `authMethods` for multiple auth options with different secrets\n */\nexport const MODEL_PROVIDER_TYPES = {\n \"claude-code-oauth-token\": {\n framework: \"claude-code\" as const,\n secretName: \"CLAUDE_CODE_OAUTH_TOKEN\",\n label: \"Claude Code (OAuth Token)\",\n secretLabel: \"OAuth token\",\n helpText:\n \"To get your OAuth token, run: claude setup-token\\n(Requires Claude Pro or Max subscription)\",\n },\n \"anthropic-api-key\": {\n framework: \"claude-code\" as const,\n secretName: \"ANTHROPIC_API_KEY\",\n label: \"Anthropic API Key\",\n secretLabel: \"API key\",\n helpText:\n \"Get your API key at: https://console.anthropic.com/settings/keys\",\n },\n \"openrouter-api-key\": {\n framework: \"claude-code\" as const,\n secretName: \"OPENROUTER_API_KEY\",\n label: \"OpenRouter\",\n secretLabel: \"API key\",\n helpText: \"Get your API key at: https://openrouter.ai/settings/keys\",\n environmentMapping: {\n ANTHROPIC_AUTH_TOKEN: \"$secret\",\n ANTHROPIC_BASE_URL: \"https://openrouter.ai/api\",\n ANTHROPIC_API_KEY: \"\",\n ANTHROPIC_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_OPUS_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_SONNET_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_HAIKU_MODEL: \"$model\",\n CLAUDE_CODE_SUBAGENT_MODEL: \"$model\",\n } as Record<string, string>,\n models: [\n \"anthropic/claude-sonnet-4.6\",\n \"anthropic/claude-opus-4.6\",\n \"anthropic/claude-sonnet-4.5\",\n \"anthropic/claude-opus-4.5\",\n \"anthropic/claude-haiku-4.5\",\n ] as string[],\n defaultModel: \"\",\n },\n \"moonshot-api-key\": {\n framework: \"claude-code\" as const,\n secretName: \"MOONSHOT_API_KEY\",\n label: \"Moonshot (Kimi)\",\n secretLabel: \"API key\",\n helpText:\n \"Get your API key at: https://platform.moonshot.ai/console/api-keys\",\n environmentMapping: {\n ANTHROPIC_AUTH_TOKEN: \"$secret\",\n ANTHROPIC_BASE_URL: \"https://api.moonshot.ai/anthropic\",\n ANTHROPIC_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_OPUS_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_SONNET_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_HAIKU_MODEL: \"$model\",\n CLAUDE_CODE_SUBAGENT_MODEL: \"$model\",\n } as Record<string, string>,\n models: [\n \"kimi-k2.5\",\n \"kimi-k2-thinking-turbo\",\n \"kimi-k2-thinking\",\n ] as string[],\n defaultModel: \"kimi-k2.5\",\n },\n \"minimax-api-key\": {\n framework: \"claude-code\" as const,\n secretName: \"MINIMAX_API_KEY\",\n label: \"MiniMax\",\n secretLabel: \"API key\",\n helpText:\n \"Get your API key at: https://platform.minimax.io/user-center/basic-information/interface-key\",\n environmentMapping: {\n ANTHROPIC_AUTH_TOKEN: \"$secret\",\n ANTHROPIC_BASE_URL: \"https://api.minimax.io/anthropic\",\n ANTHROPIC_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_OPUS_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_SONNET_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_HAIKU_MODEL: \"$model\",\n CLAUDE_CODE_SUBAGENT_MODEL: \"$model\",\n API_TIMEOUT_MS: \"3000000\",\n CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: \"1\",\n } as Record<string, string>,\n models: [\"MiniMax-M2.1\"] as string[],\n defaultModel: \"MiniMax-M2.1\",\n },\n \"deepseek-api-key\": {\n framework: \"claude-code\" as const,\n secretName: \"DEEPSEEK_API_KEY\",\n label: \"DeepSeek\",\n secretLabel: \"API key\",\n helpText: \"Get your API key at: https://platform.deepseek.com/api_keys\",\n environmentMapping: {\n ANTHROPIC_AUTH_TOKEN: \"$secret\",\n ANTHROPIC_BASE_URL: \"https://api.deepseek.com/anthropic\",\n ANTHROPIC_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_OPUS_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_SONNET_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_HAIKU_MODEL: \"$model\",\n CLAUDE_CODE_SUBAGENT_MODEL: \"$model\",\n API_TIMEOUT_MS: \"600000\",\n CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: \"1\",\n } as Record<string, string>,\n models: [\"deepseek-chat\"] as string[],\n defaultModel: \"deepseek-chat\",\n },\n \"zai-api-key\": {\n framework: \"claude-code\" as const,\n secretName: \"ZAI_API_KEY\",\n label: \"Z.AI (GLM)\",\n secretLabel: \"API key\",\n helpText: \"Get your API key at: https://z.ai/model-api\",\n environmentMapping: {\n ANTHROPIC_AUTH_TOKEN: \"$secret\",\n ANTHROPIC_BASE_URL: \"https://api.z.ai/api/anthropic\",\n ANTHROPIC_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_OPUS_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_SONNET_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_HAIKU_MODEL: \"$model\",\n CLAUDE_CODE_SUBAGENT_MODEL: \"$model\",\n API_TIMEOUT_MS: \"3000000\",\n } as Record<string, string>,\n models: [\"glm-5\", \"glm-4.7\", \"glm-4.5-air\"] as string[],\n defaultModel: \"glm-4.7\",\n },\n \"vercel-ai-gateway\": {\n framework: \"claude-code\" as const,\n secretName: \"VERCEL_AI_GATEWAY_API_KEY\",\n label: \"Vercel AI Gateway\",\n secretLabel: \"API key\",\n helpText: \"Get your API key from the Vercel AI Gateway dashboard\",\n environmentMapping: {\n ANTHROPIC_AUTH_TOKEN: \"$secret\",\n ANTHROPIC_BASE_URL: \"https://ai-gateway.vercel.sh\",\n ANTHROPIC_API_KEY: \"\",\n ANTHROPIC_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_OPUS_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_SONNET_MODEL: \"$model\",\n ANTHROPIC_DEFAULT_HAIKU_MODEL: \"$model\",\n CLAUDE_CODE_SUBAGENT_MODEL: \"$model\",\n } as Record<string, string>,\n models: [\n \"anthropic/claude-opus-4.6\",\n \"anthropic/claude-opus-4.5\",\n \"anthropic/claude-sonnet-4.6\",\n \"anthropic/claude-sonnet-4.5\",\n \"anthropic/claude-haiku-4.5\",\n \"moonshotai/kimi-k2.5\",\n \"minimax/minimax-m2.5\",\n \"zai/glm-5-turbo\",\n ] as string[],\n defaultModel: \"anthropic/claude-sonnet-4.6\",\n },\n \"azure-foundry\": {\n framework: \"claude-code\" as const,\n label: \"Azure Foundry\",\n helpText:\n \"Run Claude on Microsoft Azure Foundry.\\nSetup guide: https://code.claude.com/docs/en/microsoft-foundry\",\n authMethods: {\n \"api-key\": {\n label: \"API Key\",\n helpText: \"Use an Azure Foundry API key for authentication\",\n secrets: {\n ANTHROPIC_FOUNDRY_API_KEY: {\n label: \"ANTHROPIC_FOUNDRY_API_KEY\",\n required: true,\n helpText: \"API key from Azure Foundry portal (Endpoints and keys)\",\n },\n ANTHROPIC_FOUNDRY_RESOURCE: {\n label: \"ANTHROPIC_FOUNDRY_RESOURCE\",\n required: true,\n placeholder: \"my-resource\",\n helpText: \"Azure resource name (from portal URL)\",\n },\n },\n },\n } as Record<string, AuthMethodConfig>,\n defaultAuthMethod: \"api-key\",\n environmentMapping: {\n CLAUDE_CODE_USE_FOUNDRY: \"1\",\n ANTHROPIC_FOUNDRY_API_KEY: \"$secrets.ANTHROPIC_FOUNDRY_API_KEY\",\n ANTHROPIC_FOUNDRY_RESOURCE: \"$secrets.ANTHROPIC_FOUNDRY_RESOURCE\",\n ANTHROPIC_MODEL: \"$model\",\n } as Record<string, string>,\n models: [] as string[],\n defaultModel: \"\",\n allowCustomModel: true,\n customModelPlaceholder: \"claude-sonnet-4-5\",\n },\n \"aws-bedrock\": {\n framework: \"claude-code\" as const,\n label: \"AWS Bedrock\",\n helpText:\n \"Run Claude on AWS Bedrock.\\nSetup guide: https://code.claude.com/docs/en/amazon-bedrock\",\n authMethods: {\n \"api-key\": {\n label: \"Bedrock API Key\",\n helpText: \"Use a Bedrock API key for authentication\",\n secrets: {\n AWS_BEARER_TOKEN_BEDROCK: {\n label: \"AWS_BEARER_TOKEN_BEDROCK\",\n required: true,\n helpText: \"Bedrock API key from AWS console\",\n },\n AWS_REGION: {\n label: \"AWS_REGION\",\n required: true,\n placeholder: \"us-east-1\",\n helpText: \"e.g., us-east-1, us-west-2\",\n },\n },\n },\n \"access-keys\": {\n label: \"IAM Access Keys\",\n helpText: \"Use IAM access key secrets\",\n secrets: {\n AWS_ACCESS_KEY_ID: {\n label: \"AWS_ACCESS_KEY_ID\",\n required: true,\n helpText: \"IAM access key ID\",\n },\n AWS_SECRET_ACCESS_KEY: {\n label: \"AWS_SECRET_ACCESS_KEY\",\n required: true,\n helpText: \"IAM secret access key\",\n },\n AWS_SESSION_TOKEN: {\n label: \"AWS_SESSION_TOKEN\",\n required: false,\n helpText: \"Optional, for temporary secrets\",\n },\n AWS_REGION: {\n label: \"AWS_REGION\",\n required: true,\n placeholder: \"us-east-1\",\n helpText: \"e.g., us-east-1, us-west-2\",\n },\n },\n },\n } as Record<string, AuthMethodConfig>,\n defaultAuthMethod: \"api-key\",\n environmentMapping: {\n CLAUDE_CODE_USE_BEDROCK: \"1\",\n AWS_REGION: \"$secrets.AWS_REGION\",\n AWS_BEARER_TOKEN_BEDROCK: \"$secrets.AWS_BEARER_TOKEN_BEDROCK\",\n AWS_ACCESS_KEY_ID: \"$secrets.AWS_ACCESS_KEY_ID\",\n AWS_SECRET_ACCESS_KEY: \"$secrets.AWS_SECRET_ACCESS_KEY\",\n AWS_SESSION_TOKEN: \"$secrets.AWS_SESSION_TOKEN\",\n ANTHROPIC_MODEL: \"$model\",\n } as Record<string, string>,\n models: [] as string[],\n defaultModel: \"\",\n allowCustomModel: true,\n customModelPlaceholder: \"anthropic.claude-sonnet-4-20250514-v1:0\",\n },\n vm0: {\n framework: \"claude-code\" as const,\n label: \"VM0 Managed\",\n models: Object.keys(VM0_MODEL_TO_PROVIDER) as string[],\n defaultModel: \"claude-sonnet-4.6\",\n },\n} as const;\n\nexport type ModelProviderType = keyof typeof MODEL_PROVIDER_TYPES;\nexport type ModelProviderFramework = \"claude-code\";\n\n/**\n * Provider types hidden from user-facing selection UI.\n * These lack static firewall support (dynamic URLs or SigV4), so token\n * replacement cannot be used. New selection is blocked until a proper\n * solution is implemented; existing configurations continue to work.\n */\nconst HIDDEN_PROVIDER_LIST = [\"aws-bedrock\", \"azure-foundry\"] as const;\ntype HiddenProviderType = (typeof HIDDEN_PROVIDER_LIST)[number];\n\nconst HIDDEN_PROVIDER_TYPES: ReadonlySet<ModelProviderType> = new Set(\n HIDDEN_PROVIDER_LIST,\n);\n\n/**\n * Provider type that supports firewall (has a static base URL and secretName).\n * Excludes hidden providers (dynamic URLs / SigV4) and vm0 (meta-provider).\n * Adding a new provider without a firewall config entry will cause a compile error.\n */\ntype FirewallSupportedProvider = Exclude<\n ModelProviderType,\n HiddenProviderType | \"vm0\"\n>;\n\n/**\n * Get provider types available for user selection.\n * Excludes providers that are hidden from the UI (e.g., those without token replacement support).\n */\nexport function getSelectableProviderTypes(): ModelProviderType[] {\n return (Object.keys(MODEL_PROVIDER_TYPES) as ModelProviderType[]).filter(\n (type) => {\n return !HIDDEN_PROVIDER_TYPES.has(type);\n },\n );\n}\n\n/**\n * Firewall gateway configs for model providers with static base URLs.\n * Used to auto-generate firewall entries that protect API tokens from sandbox exposure.\n * Excluded: aws-bedrock (dynamic region URLs + SigV4), azure-foundry (dynamic resource URLs).\n *\n * Base URL is derived from environmentMapping.ANTHROPIC_BASE_URL (or https://api.anthropic.com\n * for providers without environmentMapping like anthropic-api-key and claude-code-oauth-token).\n */\nconst ANTHROPIC_API_BASE = \"https://api.anthropic.com\";\n\nfunction getFirewallBaseUrl(type: ModelProviderType): string {\n return getEnvironmentMapping(type)?.ANTHROPIC_BASE_URL ?? ANTHROPIC_API_BASE;\n}\n\n/**\n * Build a firewall config for a model provider.\n *\n * The secret name is derived from MODEL_PROVIDER_TYPES[type].secretName\n * (single source of truth), so callers never specify it — eliminating\n * any possibility of mismatch between auth header templates and placeholders.\n */\nfunction mpFirewall(\n type: FirewallSupportedProvider,\n authHeader: { name: string; valuePrefix?: string },\n placeholderValue: string,\n): ExpandedFirewallConfig {\n const secretName = MODEL_PROVIDER_TYPES[type].secretName;\n const secretRef = `\\${{ secrets.${secretName} }}`;\n const headerValue = authHeader.valuePrefix\n ? `${authHeader.valuePrefix} ${secretRef}`\n : secretRef;\n return {\n name: `model-provider:${type}`,\n ref: \"__auto__\",\n apis: [\n {\n base: getFirewallBaseUrl(type),\n auth: { headers: { [authHeader.name]: headerValue } },\n permissions: [{ name: \"unrestricted\", rules: [\"ANY /{path*}\"] }],\n },\n ],\n placeholders: { [secretName]: placeholderValue },\n };\n}\n\n/**\n * Every FirewallSupportedProvider must have an entry here.\n * Adding a new provider without a firewall config will cause a type error.\n */\nexport const MODEL_PROVIDER_FIREWALL_CONFIGS: Record<\n FirewallSupportedProvider,\n ExpandedFirewallConfig\n> = {\n // Placeholder: sk-ant-api03-{93 word/hyphen chars}AA (108 chars total)\n // Source: Semgrep regex \\Bsk-ant-api03-[\\w\\-]{93}AA\\B\n // https://semgrep.dev/blog/2025/secrets-story-and-prefixed-secrets/\n \"anthropic-api-key\": mpFirewall(\n \"anthropic-api-key\",\n { name: \"x-api-key\" },\n \"sk-ant-api03-CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCofAA\",\n ),\n // Placeholder: sk-ant-oat01-{93 word/hyphen chars}AA (108 chars total)\n // Source: same structure as API key; prefix from claude setup-token output\n // https://github.com/anthropics/claude-code/issues/18340\n // Example: sk-ant-oat01-xxxxx...xxxxx (1-year OAuth token)\n \"claude-code-oauth-token\": mpFirewall(\n \"claude-code-oauth-token\",\n { name: \"Authorization\", valuePrefix: \"Bearer\" },\n \"sk-ant-oat01-CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCofAA\",\n ),\n // Placeholder: sk-or-v1-{64 hex chars} (73 chars total)\n // Source: real key observed in GitHub issue\n // https://github.com/continuedev/continue/issues/6191\n // Example: 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\n \"openrouter-api-key\": mpFirewall(\n \"openrouter-api-key\",\n { name: \"Authorization\", valuePrefix: \"Bearer\" },\n \"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\",\n ),\n // Placeholder: sk-{32 chars} (35 chars total)\n // Source: no authoritative format documentation found; using generic sk- prefix\n \"moonshot-api-key\": mpFirewall(\n \"moonshot-api-key\",\n { name: \"Authorization\", valuePrefix: \"Bearer\" },\n \"sk-CoffeeSafeLocalCoffeeSafeLocalCo\",\n ),\n // Placeholder: eyJ... (JWT-style, variable length)\n // Source: no authoritative format documentation found; MiniMax docs do not disclose key format\n // https://platform.minimax.io/docs/api-reference/api-overview\n \"minimax-api-key\": mpFirewall(\n \"minimax-api-key\",\n { name: \"Authorization\", valuePrefix: \"Bearer\" },\n \"eyCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffe\",\n ),\n // Placeholder: sk-{32 hex chars} (35 chars total)\n // Source: Semgrep regex \\bsk-[a-f0-9]{32}\\b\n // https://semgrep.dev/blog/2025/secrets-story-and-prefixed-secrets/\n \"deepseek-api-key\": mpFirewall(\n \"deepseek-api-key\",\n { name: \"Authorization\", valuePrefix: \"Bearer\" },\n \"sk-c0ffee5afe10ca1c0ffee5afe10ca1c0\",\n ),\n // Placeholder: sk-{32 chars} (35 chars total)\n // Source: no authoritative format documentation found; using generic sk- prefix\n \"zai-api-key\": mpFirewall(\n \"zai-api-key\",\n { name: \"Authorization\", valuePrefix: \"Bearer\" },\n \"sk-CoffeeSafeLocalCoffeeSafeLocalCo\",\n ),\n // Placeholder: sk-{32 chars} (35 chars total)\n // Source: no authoritative format documentation found; Vercel gateway proxies upstream providers\n \"vercel-ai-gateway\": mpFirewall(\n \"vercel-ai-gateway\",\n { name: \"Authorization\", valuePrefix: \"Bearer\" },\n \"sk-CoffeeSafeLocalCoffeeSafeLocalCo\",\n ),\n};\n\n/**\n * Get firewall gateway config for a model provider type.\n * Returns undefined for providers without static base URLs (aws-bedrock, azure-foundry).\n */\nfunction isFirewallSupported(\n type: ModelProviderType,\n): type is FirewallSupportedProvider {\n return type in MODEL_PROVIDER_FIREWALL_CONFIGS;\n}\n\nexport function getModelProviderFirewall(\n type: ModelProviderType,\n): ExpandedFirewallConfig | undefined {\n return isFirewallSupported(type)\n ? MODEL_PROVIDER_FIREWALL_CONFIGS[type]\n : undefined;\n}\n\nexport const modelProviderTypeSchema = z.enum([\n \"claude-code-oauth-token\",\n \"anthropic-api-key\",\n \"openrouter-api-key\",\n \"moonshot-api-key\",\n \"minimax-api-key\",\n \"deepseek-api-key\",\n \"zai-api-key\",\n \"vercel-ai-gateway\",\n \"azure-foundry\",\n \"aws-bedrock\",\n \"vm0\",\n]);\n\nexport const modelProviderFrameworkSchema = z.enum([\"claude-code\"]);\n\n/**\n * Get the concrete provider type for a VM0 managed model.\n * Throws if the model is not in the VM0 model mapping.\n */\nexport function getVm0ConcreteProviderType(model: string): ModelProviderType {\n const entry = VM0_MODEL_TO_PROVIDER[model];\n if (!entry) {\n throw new Error(\n `Unknown VM0 model \"${model}\". Valid models: ${Object.keys(VM0_MODEL_TO_PROVIDER).join(\", \")}`,\n );\n }\n return entry.concreteType as ModelProviderType;\n}\n\n/**\n * Get the vendor name for a VM0 managed model.\n * Used for key pool lookup.\n */\nexport function getVm0Vendor(model: string): string {\n const entry = VM0_MODEL_TO_PROVIDER[model];\n if (!entry) {\n throw new Error(\n `Unknown VM0 model \"${model}\". Valid models: ${Object.keys(VM0_MODEL_TO_PROVIDER).join(\", \")}`,\n );\n }\n return entry.vendor;\n}\n\n/**\n * Get framework for a model provider type\n */\nexport function getFrameworkForType(\n type: ModelProviderType,\n): ModelProviderFramework {\n return MODEL_PROVIDER_TYPES[type].framework;\n}\n\n/**\n * Get secret name for a model provider type (legacy single-secret providers)\n * Returns undefined for multi-auth providers\n */\nexport function getSecretNameForType(\n type: ModelProviderType,\n): string | undefined {\n const config = MODEL_PROVIDER_TYPES[type];\n return \"secretName\" in config ? config.secretName : undefined;\n}\n\n/**\n * Check if a model provider type has multiple auth methods\n */\nexport function hasAuthMethods(type: ModelProviderType): boolean {\n const config = MODEL_PROVIDER_TYPES[type];\n return \"authMethods\" in config;\n}\n\n/**\n * Get auth methods for a model provider type\n * Returns undefined for legacy single-secret providers\n */\nexport function getAuthMethodsForType(\n type: ModelProviderType,\n): Record<string, AuthMethodConfig> | undefined {\n const config = MODEL_PROVIDER_TYPES[type];\n return \"authMethods\" in config ? config.authMethods : undefined;\n}\n\n/**\n * Get default auth method for a model provider type\n * Returns undefined for legacy single-secret providers\n */\nexport function getDefaultAuthMethod(\n type: ModelProviderType,\n): string | undefined {\n const config = MODEL_PROVIDER_TYPES[type];\n return \"defaultAuthMethod\" in config ? config.defaultAuthMethod : undefined;\n}\n\n/**\n * Get secrets config for a specific auth method\n * Returns undefined if provider doesn't have auth methods or auth method doesn't exist\n */\nexport function getSecretsForAuthMethod(\n type: ModelProviderType,\n authMethod: string,\n): Record<string, SecretFieldConfig> | undefined {\n const authMethods = getAuthMethodsForType(type);\n if (!authMethods || !(authMethod in authMethods)) {\n return undefined;\n }\n const method = authMethods[authMethod];\n return method?.secrets;\n}\n\n/**\n * Get secret names for a specific auth method\n * Returns array of secret names required for the auth method\n */\nexport function getSecretNamesForAuthMethod(\n type: ModelProviderType,\n authMethod: string,\n): string[] | undefined {\n const secrets = getSecretsForAuthMethod(type, authMethod);\n if (!secrets) {\n return undefined;\n }\n return Object.keys(secrets);\n}\n\n/**\n * Get environment mapping for a model provider type\n * Returns undefined for providers without mapping (use secret directly)\n */\nexport function getEnvironmentMapping(\n type: ModelProviderType,\n): Record<string, string> | undefined {\n const config = MODEL_PROVIDER_TYPES[type];\n return \"environmentMapping\" in config ? config.environmentMapping : undefined;\n}\n\n/**\n * Get the ANTHROPIC_BASE_URL for a model provider type.\n * Returns null for Anthropic-native providers (no base URL override).\n */\nexport function getProviderBaseUrl(type: ModelProviderType): string | null {\n const config = MODEL_PROVIDER_TYPES[type];\n if (!(\"environmentMapping\" in config)) return null;\n const url = config.environmentMapping[\"ANTHROPIC_BASE_URL\"];\n return url ?? null;\n}\n\n/**\n * Check if two model providers are compatible for session continuation.\n * Providers are compatible if they resolve to the same ANTHROPIC_BASE_URL.\n */\nexport function areProvidersCompatible(\n a: ModelProviderType,\n b: ModelProviderType,\n): boolean {\n return getProviderBaseUrl(a) === getProviderBaseUrl(b);\n}\n\n/**\n * Get available models for a model provider type\n * Returns undefined for providers without model selection\n */\nexport function getModels(type: ModelProviderType): string[] | undefined {\n const config = MODEL_PROVIDER_TYPES[type];\n return \"models\" in config ? config.models : undefined;\n}\n\n/**\n * Get default model for a model provider type\n * Returns undefined for providers without model selection\n */\nexport function getDefaultModel(type: ModelProviderType): string | undefined {\n const config = MODEL_PROVIDER_TYPES[type];\n return \"defaultModel\" in config ? config.defaultModel : undefined;\n}\n\n/**\n * Check if a model provider type supports model selection\n */\nexport function hasModelSelection(type: ModelProviderType): boolean {\n const config = MODEL_PROVIDER_TYPES[type];\n // Has predefined models OR allows custom model input\n return (\n (\"models\" in config && config.models.length > 0) ||\n (\"allowCustomModel\" in config && config.allowCustomModel === true)\n );\n}\n\n/**\n * Check if a model provider allows custom model input\n */\nexport function allowsCustomModel(type: ModelProviderType): boolean {\n const config = MODEL_PROVIDER_TYPES[type];\n return \"allowCustomModel\" in config && config.allowCustomModel === true;\n}\n\n/**\n * Get custom model placeholder for a model provider type\n */\nexport function getCustomModelPlaceholder(\n type: ModelProviderType,\n): string | undefined {\n const config = MODEL_PROVIDER_TYPES[type];\n return \"customModelPlaceholder\" in config\n ? config.customModelPlaceholder\n : undefined;\n}\n\n/**\n * Model provider response\n */\nexport const modelProviderResponseSchema = z.object({\n id: z.uuid(),\n type: modelProviderTypeSchema,\n framework: modelProviderFrameworkSchema,\n secretName: z.string().nullable(), // Legacy single-secret (deprecated for multi-auth)\n authMethod: z.string().nullable(), // For multi-auth providers\n secretNames: z.array(z.string()).nullable(), // For multi-auth providers\n isDefault: z.boolean(),\n selectedModel: z.string().nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport type ModelProviderResponse = z.infer<typeof modelProviderResponseSchema>;\n\n/**\n * List model providers response\n */\nexport const modelProviderListResponseSchema = z.object({\n modelProviders: z.array(modelProviderResponseSchema),\n});\n\nexport type ModelProviderListResponse = z.infer<\n typeof modelProviderListResponseSchema\n>;\n\n/**\n * Create/update model provider request\n *\n * Legacy providers use `secret` (single string)\n * Multi-auth providers use `authMethod` + `secrets` (map)\n */\nexport const upsertModelProviderRequestSchema = z.object({\n type: modelProviderTypeSchema,\n secret: z.string().min(1).optional(), // Legacy single secret\n authMethod: z.string().optional(), // For multi-auth providers\n secrets: z.record(z.string(), z.string()).optional(), // For multi-auth providers\n selectedModel: z.string().optional(),\n});\n\nexport type UpsertModelProviderRequest = z.infer<\n typeof upsertModelProviderRequestSchema\n>;\n\n/**\n * Upsert response includes created flag\n */\nexport const upsertModelProviderResponseSchema = z.object({\n provider: modelProviderResponseSchema,\n created: z.boolean(),\n});\n\nexport type UpsertModelProviderResponse = z.infer<\n typeof upsertModelProviderResponseSchema\n>;\n\n/**\n * Update model request schema\n */\nexport const updateModelRequestSchema = z.object({\n selectedModel: z.string().optional(),\n});\n\nexport type UpdateModelRequest = z.infer<typeof updateModelRequestSchema>;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport { summaryEntrySchema } from \"./chat-threads\";\n\nconst c = initContract();\n\n/**\n * Stored chat message schema (persisted in agent_sessions.chat_messages JSONB)\n */\nconst storedChatMessageSchema = z.object({\n role: z.enum([\"user\", \"assistant\"]),\n content: z.string(),\n runId: z.string().optional(),\n summaries: z.array(summaryEntrySchema).optional(),\n createdAt: z.string(),\n});\n\n/**\n * Session response schema\n * Represents a persistent running context across multiple runs\n */\nconst sessionResponseSchema = z.object({\n id: z.string(),\n agentComposeId: z.string(),\n conversationId: z.string().nullable(),\n artifactName: z.string().nullable(),\n secretNames: z.array(z.string()).nullable(),\n chatMessages: z.array(storedChatMessageSchema).optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\n/**\n * Session list item schema (lightweight, for listing)\n */\nconst sessionListItemSchema = z.object({\n id: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n messageCount: z.number(),\n preview: z.string().nullable(),\n});\n\n/**\n * Agent compose snapshot schema (stored in checkpoints)\n */\nconst agentComposeSnapshotSchema = z.object({\n agentComposeVersionId: z.string(),\n vars: z.record(z.string(), z.string()).optional(),\n secretNames: z.array(z.string()).optional(),\n});\n\n/**\n * Artifact snapshot schema\n */\nconst artifactSnapshotSchema = z.object({\n artifactName: z.string(),\n artifactVersion: z.string(),\n});\n\n/**\n * Volume versions snapshot schema\n */\nconst volumeVersionsSnapshotSchema = z.object({\n versions: z.record(z.string(), z.string()),\n});\n\n/**\n * Checkpoint response schema\n * Represents an immutable snapshot of agent run state\n */\nconst checkpointResponseSchema = z.object({\n id: z.string(),\n runId: z.string(),\n conversationId: z.string(),\n agentComposeSnapshot: agentComposeSnapshotSchema,\n artifactSnapshot: artifactSnapshotSchema.nullable(),\n volumeVersionsSnapshot: volumeVersionsSnapshotSchema.nullable(),\n createdAt: z.string(),\n});\n\n/**\n * Sessions list route contract (/api/agent/sessions)\n */\nexport const sessionsContract = c.router({\n /**\n * GET /api/agent/sessions?agentComposeId=X\n * List chat sessions for an agent\n */\n list: {\n method: \"GET\",\n path: \"/api/agent/sessions\",\n headers: authHeadersSchema,\n query: z.object({\n agentComposeId: z.string().min(1, \"agentComposeId is required\"),\n }),\n responses: {\n 200: z.object({ sessions: z.array(sessionListItemSchema) }),\n 401: apiErrorSchema,\n },\n summary: \"List chat sessions for an agent\",\n },\n});\n\n/**\n * Sessions by ID route contract (/api/agent/sessions/[id])\n */\nexport const sessionsByIdContract = c.router({\n /**\n * GET /api/agent/sessions/:id\n * Get session by ID\n */\n getById: {\n method: \"GET\",\n path: \"/api/agent/sessions/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Session ID is required\"),\n }),\n responses: {\n 200: sessionResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get session by ID\",\n },\n});\n\n/**\n * Checkpoints by ID route contract (/api/agent/checkpoints/[id])\n */\nexport const checkpointsByIdContract = c.router({\n /**\n * GET /api/agent/checkpoints/:id\n * Get checkpoint by ID\n */\n getById: {\n method: \"GET\",\n path: \"/api/agent/checkpoints/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Checkpoint ID is required\"),\n }),\n responses: {\n 200: checkpointResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get checkpoint by ID\",\n },\n});\n\nexport type SessionsContract = typeof sessionsContract;\nexport type SessionsByIdContract = typeof sessionsByIdContract;\nexport type CheckpointsByIdContract = typeof checkpointsByIdContract;\n\n// Export schemas for reuse\nexport {\n storedChatMessageSchema,\n sessionResponseSchema,\n sessionListItemSchema,\n checkpointResponseSchema,\n agentComposeSnapshotSchema,\n artifactSnapshotSchema,\n volumeVersionsSnapshotSchema,\n};\n\n// Export inferred types for consumers\nexport type StoredChatMessage = z.infer<typeof storedChatMessageSchema>;\nexport type SessionResponse = z.infer<typeof sessionResponseSchema>;\nexport type SessionListItem = z.infer<typeof sessionListItemSchema>;\nexport type CheckpointResponse = z.infer<typeof checkpointResponseSchema>;\nexport type AgentComposeSnapshot = z.infer<typeof agentComposeSnapshotSchema>;\nexport type ArtifactSnapshot = z.infer<typeof artifactSnapshotSchema>;\nexport type VolumeVersionsSnapshot = z.infer<\n typeof volumeVersionsSnapshotSchema\n>;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport { runStatusSchema } from \"./runs\";\n\nconst c = initContract();\n\nconst chatThreadListItemSchema = z.object({\n id: z.string(),\n title: z.string().nullable(),\n agentId: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst toolSummaryEntrySchema = z.object({\n kind: z.literal(\"tool\"),\n name: z.string(),\n input: z.record(z.string(), z.unknown()).optional(),\n});\n\nconst textSummaryEntrySchema = z.object({\n kind: z.literal(\"text\"),\n text: z.string(),\n});\n\nconst summaryEntrySchema = z.union([\n z.string(),\n toolSummaryEntrySchema,\n textSummaryEntrySchema,\n]);\n\nconst storedChatMessageSchema = z.object({\n role: z.enum([\"user\", \"assistant\"]),\n content: z.string(),\n runId: z.string().optional(),\n error: z.string().optional(),\n summaries: z.array(summaryEntrySchema).optional(),\n createdAt: z.string(),\n});\n\nconst unsavedRunSchema = z.object({\n runId: z.string(),\n status: z.string(),\n prompt: z.string(),\n error: z.string().nullable(),\n});\n\nconst chatThreadDetailSchema = z.object({\n id: z.string(),\n title: z.string().nullable(),\n agentId: z.string(),\n chatMessages: z.array(storedChatMessageSchema),\n latestSessionId: z.string().nullable(),\n unsavedRuns: z.array(unsavedRunSchema),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\n/**\n * Chat threads list route contract (/api/chat-threads)\n */\nexport const chatThreadsContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/chat-threads\",\n headers: authHeadersSchema,\n body: z.object({\n agentId: z.string().min(1),\n title: z.string().optional(),\n }),\n responses: {\n 201: z.object({\n id: z.string(),\n title: z.string().nullable(),\n createdAt: z.string(),\n }),\n 401: apiErrorSchema,\n },\n summary: \"Create a new chat thread\",\n },\n list: {\n method: \"GET\",\n path: \"/api/zero/chat-threads\",\n headers: authHeadersSchema,\n query: z.object({\n agentId: z.string().min(1, \"agentId is required\"),\n }),\n responses: {\n 200: z.object({ threads: z.array(chatThreadListItemSchema) }),\n 401: apiErrorSchema,\n },\n summary: \"List chat threads for an agent\",\n },\n});\n\n/**\n * Chat thread by ID route contract (/api/chat-threads/[id])\n */\nexport const chatThreadByIdContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/chat-threads/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string() }),\n responses: {\n 200: chatThreadDetailSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get chat thread detail with messages\",\n },\n delete: {\n method: \"DELETE\",\n path: \"/api/zero/chat-threads/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string() }),\n responses: {\n 204: c.noBody(),\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Delete a chat thread\",\n body: c.noBody(),\n },\n});\n\n/**\n * Chat messages contract (/api/zero/chat/messages)\n * Unified endpoint: create thread (if needed) + run + association in one call.\n */\nexport const chatMessagesContract = c.router({\n send: {\n method: \"POST\",\n path: \"/api/zero/chat/messages\",\n headers: authHeadersSchema,\n body: z.object({\n agentId: z.string().min(1),\n prompt: z.string().min(1),\n threadId: z.string().optional(),\n modelProvider: z.string().optional(),\n }),\n responses: {\n 201: z.object({\n runId: z.string(),\n threadId: z.string(),\n status: runStatusSchema,\n createdAt: z.string(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Send a chat message (create thread + run + association)\",\n },\n});\n\nexport type ChatThreadsContract = typeof chatThreadsContract;\nexport type ChatThreadByIdContract = typeof chatThreadByIdContract;\nexport type ChatMessagesContract = typeof chatMessagesContract;\n\nexport { chatThreadListItemSchema, chatThreadDetailSchema, summaryEntrySchema };\n\nexport type SummaryEntry = z.infer<typeof summaryEntrySchema>;\nexport type ChatThreadListItem = z.infer<typeof chatThreadListItemSchema>;\nexport type ChatThreadDetail = z.infer<typeof chatThreadDetailSchema>;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { experimentalFirewallsSchema } from \"./firewalls\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\n/**\n * Default profile when none is specified.\n * Must stay in sync with Rust: crates/runner/src/profile.rs → DEFAULT_PROFILE\n */\nexport const DEFAULT_PROFILE = \"vm0/default\";\n\n/**\n * Runner group format: vm0/<name> (e.g., \"vm0/production\")\n */\nexport const runnerGroupSchema = z\n .string()\n .regex(\n /^[a-z0-9-]+\\/[a-z0-9-]+$/,\n \"Runner group must be in vm0/<name> format (e.g., vm0/production)\",\n );\n\n/**\n * Job schema for polling response\n */\nexport const jobSchema = z.object({\n runId: z.uuid(),\n prompt: z.string(),\n appendSystemPrompt: z.string().nullable(),\n agentComposeVersionId: z.string().nullable(),\n vars: z.record(z.string(), z.string()).nullable(),\n checkpointId: z.uuid().nullable(),\n experimentalProfile: z.string().optional(),\n});\n\n/**\n * Runners poll contract - POST /api/runners/poll\n * Long-polling endpoint to fetch pending jobs for a runner group\n *\n * NOTE: Uses POST instead of GET to avoid CDN caching issues on preview deployments.\n * POST requests are never cached, ensuring the Authorization header is always read fresh.\n */\nexport const runnersPollContract = c.router({\n poll: {\n method: \"POST\",\n path: \"/api/runners/poll\",\n headers: authHeadersSchema,\n body: z.object({\n group: runnerGroupSchema,\n profiles: z.array(z.string()).optional(),\n }),\n responses: {\n 200: z.object({\n job: jobSchema.nullable(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Poll for pending jobs (long-polling with 30s timeout)\",\n },\n});\n\n/**\n * Storage entry in manifest\n */\nexport const storageEntrySchema = z.object({\n mountPath: z.string(),\n archiveUrl: z.string().nullable(),\n});\n\n/**\n * Artifact entry in manifest\n */\nexport const artifactEntrySchema = z.object({\n mountPath: z.string(),\n archiveUrl: z.string().nullable(),\n vasStorageName: z.string(),\n vasVersionId: z.string(),\n});\n\n/**\n * Storage manifest with presigned URLs for download\n */\nexport const storageManifestSchema = z.object({\n storages: z.array(storageEntrySchema),\n artifact: artifactEntrySchema.nullable(),\n memory: artifactEntrySchema.nullable(),\n});\n\n/**\n * Resume session information\n */\nexport const resumeSessionSchema = z.object({\n sessionId: z.string(),\n sessionHistory: z.string(),\n});\n\n/**\n * Stored execution context (subset stored in database for late routing)\n * Contains prepared context without runtime-generated fields\n * Secrets are encrypted with AES-256-GCM before storage\n */\nexport const storedExecutionContextSchema = z.object({\n workingDir: z.string(),\n storageManifest: storageManifestSchema.nullable(),\n environment: z.record(z.string(), z.string()).nullable(),\n resumeSession: resumeSessionSchema.nullable(),\n encryptedSecrets: z.string().nullable(), // AES-256-GCM encrypted Record<string, string> (secret name → value)\n // Maps secret names to OAuth connector types for runtime token refresh (e.g. { \"GMAIL_ACCESS_TOKEN\": \"gmail\" })\n secretConnectorMap: z.record(z.string(), z.string()).nullable().optional(),\n cliAgentType: z.string(),\n // Debug flag to force real Claude in mock environments (internal use only)\n debugNoMockClaude: z.boolean().optional(),\n // Dispatch timestamp for E2E timing metrics\n apiStartTime: z.number().optional(),\n // User's timezone preference (IANA format, e.g., \"Asia/Shanghai\")\n userTimezone: z.string().optional(),\n // Memory storage name (for first-run when manifest.memory is null)\n memoryName: z.string().optional(),\n // Experimental firewall for proxy-side token replacement\n experimentalFirewalls: experimentalFirewallsSchema.optional(),\n // Tools to disable in Claude CLI (passed as --disallowed-tools)\n disallowedTools: z.array(z.string()).optional(),\n // Tools to make available in Claude CLI (passed as --tools)\n tools: z.array(z.string()).optional(),\n // Settings JSON to pass to Claude CLI (passed as --settings)\n settings: z.string().optional(),\n // VM profile for resource allocation (e.g., \"vm0/default\")\n experimentalProfile: z.string().optional(),\n});\n\n/**\n * Execution context returned when claiming a job.\n *\n * Keep in sync with Rust: crates/runner/src/types.rs → ExecutionContext\n */\nexport const executionContextSchema = z.object({\n runId: z.uuid(),\n prompt: z.string(),\n appendSystemPrompt: z.string().nullable(),\n agentComposeVersionId: z.string().nullable(),\n vars: z.record(z.string(), z.string()).nullable(),\n checkpointId: z.uuid().nullable(),\n sandboxToken: z.string(),\n // New fields for E2B parity:\n workingDir: z.string(),\n storageManifest: storageManifestSchema.nullable(),\n environment: z.record(z.string(), z.string()).nullable(),\n resumeSession: resumeSessionSchema.nullable(),\n secretValues: z.array(z.string()).nullable(),\n // AES-256-GCM encrypted Record<string, string> — passed through to mitm-addon for auth resolution\n encryptedSecrets: z.string().nullable(),\n // Maps secret names to OAuth connector types for runtime token refresh\n secretConnectorMap: z.record(z.string(), z.string()).nullable().optional(),\n cliAgentType: z.string(),\n // Debug flag to force real Claude in mock environments (internal use only)\n debugNoMockClaude: z.boolean().optional(),\n // Dispatch timestamp for E2E timing metrics\n apiStartTime: z.number().optional(),\n // User's timezone preference (IANA format, e.g., \"Asia/Shanghai\")\n userTimezone: z.string().optional(),\n // Memory storage name (for first-run when manifest.memory is null)\n memoryName: z.string().optional(),\n // Experimental firewall for proxy-side token replacement\n experimentalFirewalls: experimentalFirewallsSchema.optional(),\n // Tools to disable in Claude CLI (passed as --disallowed-tools)\n disallowedTools: z.array(z.string()).optional(),\n // Tools to make available in Claude CLI (passed as --tools)\n tools: z.array(z.string()).optional(),\n // Settings JSON to pass to Claude CLI (passed as --settings)\n settings: z.string().optional(),\n // VM profile for resource allocation (e.g., \"vm0/default\")\n experimentalProfile: z.string().optional(),\n});\n\n/**\n * Runners job claim contract - POST /api/runners/jobs/:id/claim\n * Claim a pending job for execution\n * Verifies that the job's agent_run belongs to the authenticated user\n */\nexport const runnersJobClaimContract = c.router({\n claim: {\n method: \"POST\",\n path: \"/api/runners/jobs/:id/claim\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.uuid(),\n }),\n body: z.object({}),\n responses: {\n 200: executionContextSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema, // Job does not belong to user\n 404: apiErrorSchema,\n 409: apiErrorSchema, // Already claimed\n 500: apiErrorSchema,\n },\n summary: \"Claim a pending job for execution\",\n },\n});\n\nexport type RunnersPollContract = typeof runnersPollContract;\nexport type RunnersJobClaimContract = typeof runnersJobClaimContract;\nexport type Job = z.infer<typeof jobSchema>;\nexport type ExecutionContext = z.infer<typeof executionContextSchema>;\nexport type StoredExecutionContext = z.infer<\n typeof storedExecutionContextSchema\n>;\nexport type StorageEntry = z.infer<typeof storageEntrySchema>;\nexport type ArtifactEntry = z.infer<typeof artifactEntrySchema>;\nexport type StorageManifest = z.infer<typeof storageManifestSchema>;\nexport type ResumeSession = z.infer<typeof resumeSessionSchema>;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport { runnerGroupSchema } from \"./runners\";\n\nconst c = initContract();\n\n/**\n * Ably token request schema (matches Ably SDK's TokenRequest type)\n */\nconst ablyTokenRequestSchema = z.object({\n keyName: z.string(),\n ttl: z.number().optional(),\n timestamp: z.number(),\n capability: z.string(),\n clientId: z.string().optional(),\n nonce: z.string(),\n mac: z.string(),\n});\n\n/**\n * Runner realtime token contract for /api/runners/realtime/token\n */\nexport const runnerRealtimeTokenContract = c.router({\n /**\n * POST /api/runners/realtime/token\n * Get an Ably token to subscribe to a runner group's job notification channel\n */\n create: {\n method: \"POST\",\n path: \"/api/runners/realtime/token\",\n headers: authHeadersSchema,\n body: z.object({\n group: runnerGroupSchema,\n }),\n responses: {\n 200: ablyTokenRequestSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Get Ably token for runner group job notifications\",\n },\n});\n\nexport type RunnerRealtimeTokenContract = typeof runnerRealtimeTokenContract;\n","import { z } from \"zod\";\nimport { FeatureSwitchKey } from \"../feature-switch-key\";\n\n/**\n * Secret field configuration for connector auth methods\n */\nexport interface ConnectorSecretConfig {\n label: string;\n required: boolean;\n placeholder?: string;\n helpText?: string;\n /** Storage type: \"secret\" (default, encrypted) or \"variable\" (plain text). */\n type?: \"secret\" | \"variable\";\n}\n\n/**\n * Auth method configuration for connectors\n */\nexport interface ConnectorAuthMethodConfig {\n label: string;\n helpText?: string;\n secrets: Record<string, ConnectorSecretConfig>;\n}\n\n/**\n * OAuth configuration for connectors that support OAuth flow.\n */\nexport interface ConnectorOAuthConfig {\n authorizationUrl?: string;\n tokenUrl: string;\n scopes: string[];\n}\n\nexport type ConnectorAuthMethodType = \"oauth\" | \"api-token\" | \"api\";\n\n/**\n * Base configuration shape for all connector types.\n */\nexport interface ConnectorConfig {\n readonly label: string;\n readonly helpText: string;\n readonly featureFlag?: FeatureSwitchKey;\n readonly authMethods: Partial<\n Record<ConnectorAuthMethodType, ConnectorAuthMethodConfig>\n >;\n readonly defaultAuthMethod?: ConnectorAuthMethodType;\n readonly oauth?: ConnectorOAuthConfig;\n /** Environment mapping declaring which env vars this connector provides. */\n readonly environmentMapping: Record<string, string>;\n}\n\n/**\n * Connector type configuration\n * Maps type to display info, auth methods, and OAuth environment mapping.\n */\nconst CONNECTOR_TYPES_DEF = {\n axiom: {\n label: \"Axiom\",\n environmentMapping: {\n AXIOM_TOKEN: \"$secrets.AXIOM_TOKEN\",\n },\n helpText:\n \"Connect your Axiom account to query logs, manage datasets, and access observability data\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [Axiom](https://app.axiom.co)\\n2. Go to **Settings > API Tokens**\\n3. Create a new API token with the required permissions\\n4. Copy the token\",\n secrets: {\n AXIOM_TOKEN: {\n label: \"API Token\",\n required: true,\n placeholder: \"xaat-...\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n ahrefs: {\n label: \"Ahrefs\",\n environmentMapping: {\n AHREFS_TOKEN: \"$secrets.AHREFS_ACCESS_TOKEN\",\n },\n featureFlag: FeatureSwitchKey.AhrefsConnector,\n helpText:\n \"Connect your Ahrefs account to access SEO data, backlink analysis, and keyword research\",\n authMethods: {\n oauth: {\n label: \"OAuth\",\n helpText: \"Sign in with Ahrefs to grant access.\",\n secrets: {\n AHREFS_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n AHREFS_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n AHREFS_TOKEN: {\n label: \"API Token\",\n required: true,\n placeholder: \"your-ahrefs-api-token\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n oauth: {\n authorizationUrl: \"https://app.ahrefs.com/api/auth\",\n tokenUrl: \"https://app.ahrefs.com/api/token\",\n scopes: [\"api\"],\n },\n },\n agentmail: {\n label: \"AgentMail\",\n environmentMapping: {\n AGENTMAIL_TOKEN: \"$secrets.AGENTMAIL_TOKEN\",\n },\n helpText:\n \"Connect your AgentMail account to create email inboxes for AI agents, send and receive emails, manage threads, drafts, and webhooks\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [AgentMail Console](https://console.agentmail.to)\\n2. Go to **API Keys**\\n3. Create a new API key\\n4. Copy the key\",\n secrets: {\n AGENTMAIL_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-agentmail-api-key\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n airtable: {\n label: \"Airtable\",\n environmentMapping: {\n AIRTABLE_TOKEN: \"$secrets.AIRTABLE_ACCESS_TOKEN\",\n },\n helpText:\n \"Connect your Airtable account to access bases, tables, and records\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Airtable to grant access.\",\n secrets: {\n AIRTABLE_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n AIRTABLE_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://airtable.com/oauth2/v1/authorize\",\n tokenUrl: \"https://airtable.com/oauth2/v1/token\",\n scopes: [\n \"data.records:read\",\n \"data.records:write\",\n \"data.recordComments:read\",\n \"data.recordComments:write\",\n \"schema.bases:read\",\n \"schema.bases:write\",\n \"user.email:read\",\n ],\n },\n },\n github: {\n label: \"GitHub\",\n environmentMapping: {\n GH_TOKEN: \"$secrets.GITHUB_ACCESS_TOKEN\",\n GITHUB_TOKEN: \"$secrets.GITHUB_ACCESS_TOKEN\",\n },\n helpText:\n \"Connect your GitHub account to access repositories and GitHub features\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with GitHub to grant access.\",\n secrets: {\n GITHUB_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://github.com/login/oauth/authorize\",\n tokenUrl: \"https://github.com/login/oauth/access_token\",\n scopes: [\"repo\", \"project\"],\n },\n },\n notion: {\n label: \"Notion\",\n environmentMapping: {\n NOTION_TOKEN: \"$secrets.NOTION_ACCESS_TOKEN\",\n },\n helpText: \"Connect your Notion workspace to access pages and databases\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Notion to grant access.\",\n secrets: {\n NOTION_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n NOTION_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://api.notion.com/v1/oauth/authorize\",\n tokenUrl: \"https://api.notion.com/v1/oauth/token\",\n scopes: [],\n },\n },\n gmail: {\n label: \"Gmail\",\n environmentMapping: {\n GMAIL_TOKEN: \"$secrets.GMAIL_ACCESS_TOKEN\",\n },\n helpText: \"Connect your Gmail account to send and read emails\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Google to grant Gmail access.\",\n secrets: {\n GMAIL_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n GMAIL_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://accounts.google.com/o/oauth2/v2/auth\",\n tokenUrl: \"https://oauth2.googleapis.com/token\",\n scopes: [\"https://www.googleapis.com/auth/gmail.modify\"],\n },\n },\n \"google-sheets\": {\n label: \"Google Sheets\",\n environmentMapping: {\n GOOGLE_SHEETS_TOKEN: \"$secrets.GOOGLE_SHEETS_ACCESS_TOKEN\",\n },\n helpText: \"Connect your Google account to access and manage spreadsheets\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Google to grant Google Sheets access.\",\n secrets: {\n GOOGLE_SHEETS_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n GOOGLE_SHEETS_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://accounts.google.com/o/oauth2/v2/auth\",\n tokenUrl: \"https://oauth2.googleapis.com/token\",\n scopes: [\n \"https://www.googleapis.com/auth/spreadsheets\",\n \"https://www.googleapis.com/auth/userinfo.email\",\n ],\n },\n },\n \"google-docs\": {\n label: \"Google Docs\",\n environmentMapping: {\n GOOGLE_DOCS_TOKEN: \"$secrets.GOOGLE_DOCS_ACCESS_TOKEN\",\n },\n helpText: \"Connect your Google account to access and manage documents\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Google to grant Google Docs access.\",\n secrets: {\n GOOGLE_DOCS_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n GOOGLE_DOCS_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://accounts.google.com/o/oauth2/v2/auth\",\n tokenUrl: \"https://oauth2.googleapis.com/token\",\n scopes: [\n \"https://www.googleapis.com/auth/documents\",\n \"https://www.googleapis.com/auth/userinfo.email\",\n ],\n },\n },\n \"google-drive\": {\n label: \"Google Drive\",\n environmentMapping: {\n GOOGLE_DRIVE_TOKEN: \"$secrets.GOOGLE_DRIVE_ACCESS_TOKEN\",\n },\n helpText: \"Connect your Google account to access and manage files in Drive\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Google to grant Google Drive access.\",\n secrets: {\n GOOGLE_DRIVE_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n GOOGLE_DRIVE_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://accounts.google.com/o/oauth2/v2/auth\",\n tokenUrl: \"https://oauth2.googleapis.com/token\",\n scopes: [\n \"https://www.googleapis.com/auth/drive\",\n \"https://www.googleapis.com/auth/userinfo.email\",\n ],\n },\n },\n \"google-calendar\": {\n label: \"Google Calendar\",\n environmentMapping: {\n GOOGLE_CALENDAR_TOKEN: \"$secrets.GOOGLE_CALENDAR_ACCESS_TOKEN\",\n },\n helpText:\n \"Connect your Google account to access and manage calendar events\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Google to grant Google Calendar access.\",\n secrets: {\n GOOGLE_CALENDAR_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n GOOGLE_CALENDAR_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://accounts.google.com/o/oauth2/v2/auth\",\n tokenUrl: \"https://oauth2.googleapis.com/token\",\n scopes: [\n \"https://www.googleapis.com/auth/calendar\",\n \"https://www.googleapis.com/auth/userinfo.email\",\n ],\n },\n },\n close: {\n label: \"Close\",\n environmentMapping: {\n CLOSE_TOKEN: \"$secrets.CLOSE_ACCESS_TOKEN\",\n },\n featureFlag: FeatureSwitchKey.CloseConnector,\n helpText:\n \"Connect your Close account to manage leads, contacts, and opportunities\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Close to grant access.\",\n secrets: {\n CLOSE_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n CLOSE_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://app.close.com/oauth2/authorize/\",\n tokenUrl: \"https://api.close.com/oauth2/token/\",\n scopes: [\"all.full_access\", \"offline_access\"],\n },\n },\n \"hugging-face\": {\n label: \"Hugging Face\",\n environmentMapping: {\n HUGGING_FACE_TOKEN: \"$secrets.HUGGING_FACE_TOKEN\",\n },\n helpText:\n \"Connect your Hugging Face account to access models, datasets, and inference APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [Hugging Face](https://huggingface.co)\\n2. Go to **Settings → Access Tokens**\\n3. Create a new token with the required permissions\\n4. Copy the token\",\n secrets: {\n HUGGING_FACE_TOKEN: {\n label: \"API Token\",\n required: true,\n placeholder: \"hf_...\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n hume: {\n label: \"Hume\",\n environmentMapping: {\n HUME_TOKEN: \"$secrets.HUME_TOKEN\",\n },\n helpText:\n \"Connect your Hume account to access emotion AI, speech-to-speech, and expressive text-to-speech APIs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to the [Hume Portal](https://app.hume.ai)\\n2. Navigate to the **API Keys** page\\n3. Copy your API key\",\n secrets: {\n HUME_TOKEN: {\n label: \"API Key\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n heygen: {\n label: \"HeyGen\",\n environmentMapping: {\n HEYGEN_TOKEN: \"$secrets.HEYGEN_TOKEN\",\n },\n helpText:\n \"Connect your HeyGen account to create AI-generated videos, manage avatars, and automate video production\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n HEYGEN_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-heygen-api-key\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n hubspot: {\n label: \"HubSpot\",\n environmentMapping: {\n HUBSPOT_TOKEN: \"$secrets.HUBSPOT_ACCESS_TOKEN\",\n },\n helpText:\n \"Connect your HubSpot account to manage contacts, companies, deals, and tickets\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with HubSpot to grant access.\",\n secrets: {\n HUBSPOT_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n HUBSPOT_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://app.hubspot.com/oauth/authorize\",\n tokenUrl: \"https://api.hubapi.com/oauth/v1/token\",\n scopes: [\n \"crm.objects.contacts.read\",\n \"crm.objects.contacts.write\",\n \"crm.objects.companies.read\",\n \"crm.objects.companies.write\",\n \"crm.objects.deals.read\",\n \"crm.objects.deals.write\",\n \"tickets\",\n \"crm.objects.line_items.read\",\n \"crm.objects.quotes.read\",\n \"crm.lists.read\",\n \"crm.schemas.contacts.read\",\n \"settings.users.read\",\n ],\n },\n },\n computer: {\n label: \"Computer\",\n environmentMapping: {\n COMPUTER_CONNECTOR_BRIDGE_TOKEN:\n \"$secrets.COMPUTER_CONNECTOR_BRIDGE_TOKEN\",\n COMPUTER_CONNECTOR_DOMAIN: \"$secrets.COMPUTER_CONNECTOR_DOMAIN\",\n },\n featureFlag: FeatureSwitchKey.ComputerConnector,\n helpText:\n \"Expose local services to remote sandboxes via authenticated ngrok tunnels\",\n authMethods: {\n api: {\n label: \"API\",\n helpText: \"Server-provisioned ngrok tunnel credentials.\",\n secrets: {\n COMPUTER_CONNECTOR_BRIDGE_TOKEN: {\n label: \"Bridge Token\",\n required: true,\n },\n COMPUTER_CONNECTOR_DOMAIN_ID: {\n label: \"Domain ID\",\n required: true,\n },\n COMPUTER_CONNECTOR_DOMAIN: {\n label: \"Tunnel Domain\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"api\",\n },\n slack: {\n label: \"Slack\",\n environmentMapping: {\n SLACK_TOKEN: \"$secrets.SLACK_ACCESS_TOKEN\",\n },\n helpText: \"Connect your Slack account to send messages and read channels\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Slack to grant access.\",\n secrets: {\n SLACK_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://slack.com/oauth/v2/authorize\",\n tokenUrl: \"https://slack.com/api/oauth.v2.access\",\n scopes: [\n // Channels\n \"channels:read\",\n \"channels:history\",\n // Messaging\n \"chat:write\",\n // Users\n \"users:read\",\n \"users:read.email\",\n // Files\n \"files:read\",\n \"files:write\",\n // Direct messages (high priority)\n \"im:history\",\n \"im:write\",\n // Reactions (high priority)\n \"reactions:read\",\n \"reactions:write\",\n // Search (high priority)\n \"search:read\",\n // Private channels (high priority)\n \"groups:read\",\n \"groups:history\",\n // Reminders (medium priority)\n \"reminders:read\",\n \"reminders:write\",\n // Pins (medium priority)\n \"pins:read\",\n \"pins:write\",\n // User groups (medium priority)\n \"usergroups:read\",\n // Multi-person DMs (medium priority)\n \"mpim:history\",\n // Do Not Disturb (low priority)\n \"dnd:read\",\n // Bookmarks (low priority)\n \"bookmarks:read\",\n // Team info (low priority)\n \"team:read\",\n // Custom emoji (low priority)\n \"emoji:read\",\n ],\n },\n },\n docusign: {\n label: \"DocuSign\",\n environmentMapping: {\n DOCUSIGN_TOKEN: \"$secrets.DOCUSIGN_ACCESS_TOKEN\",\n },\n featureFlag: FeatureSwitchKey.DocuSignConnector,\n helpText:\n \"Connect your DocuSign account to send and manage electronic signatures\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with DocuSign to grant access.\",\n secrets: {\n DOCUSIGN_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n DOCUSIGN_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://account.docusign.com/oauth/auth\",\n tokenUrl: \"https://account.docusign.com/oauth/token\",\n scopes: [\"signature\", \"extended\", \"openid\"],\n },\n },\n dropbox: {\n label: \"Dropbox\",\n environmentMapping: {\n DROPBOX_TOKEN: \"$secrets.DROPBOX_ACCESS_TOKEN\",\n },\n featureFlag: FeatureSwitchKey.DropboxConnector,\n helpText: \"Connect your Dropbox account to access and manage files\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Dropbox to grant access.\",\n secrets: {\n DROPBOX_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n DROPBOX_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n \"api-token\": {\n label: \"Access Token\",\n secrets: {\n DROPBOX_TOKEN: {\n label: \"Access Token\",\n required: true,\n placeholder: \"sl.xxxxxxxx\",\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://www.dropbox.com/oauth2/authorize\",\n tokenUrl: \"https://api.dropboxapi.com/oauth2/token\",\n scopes: [\n \"account_info.read\",\n \"files.metadata.read\",\n \"files.content.read\",\n ],\n },\n },\n linear: {\n label: \"Linear\",\n environmentMapping: {\n LINEAR_TOKEN: \"$secrets.LINEAR_ACCESS_TOKEN\",\n },\n helpText: \"Connect your Linear account to manage issues and projects\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Linear to grant access.\",\n secrets: {\n LINEAR_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n LINEAR_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: false,\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://linear.app/oauth/authorize\",\n tokenUrl: \"https://api.linear.app/oauth/token\",\n scopes: [\n \"read\",\n \"write\",\n \"issues:create\",\n \"comments:create\",\n \"timeSchedule:write\",\n ],\n },\n },\n intercom: {\n label: \"Intercom\",\n environmentMapping: {\n INTERCOM_TOKEN: \"$secrets.INTERCOM_TOKEN\",\n },\n helpText:\n \"Connect your Intercom account to manage customer conversations, contacts, messages, and support tickets\",\n authMethods: {\n \"api-token\": {\n label: \"Access Token\",\n secrets: {\n INTERCOM_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n instantly: {\n label: \"Instantly\",\n environmentMapping: {\n INSTANTLY_API_KEY: \"$secrets.INSTANTLY_API_KEY\",\n },\n helpText:\n \"Connect your Instantly account to manage email campaigns, leads, and outreach sequences\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n INSTANTLY_API_KEY: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-instantly-api-key\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n jam: {\n label: \"Jam\",\n environmentMapping: {\n JAM_TOKEN: \"$secrets.JAM_TOKEN\",\n },\n helpText:\n \"Connect your Jam account to capture bugs, manage reports, and access debugging telemetry\",\n authMethods: {\n \"api-token\": {\n label: \"Personal Access Token\",\n secrets: {\n JAM_TOKEN: {\n label: \"Personal Access Token\",\n required: true,\n placeholder: \"jam_pat_...\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n jira: {\n label: \"Jira\",\n environmentMapping: {\n JIRA_API_TOKEN: \"$secrets.JIRA_API_TOKEN\",\n JIRA_DOMAIN: \"$vars.JIRA_DOMAIN\",\n JIRA_EMAIL: \"$vars.JIRA_EMAIL\",\n },\n helpText:\n \"Connect your Jira account to manage projects, issues, sprints, and workflows\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n JIRA_API_TOKEN: {\n label: \"API Token\",\n required: true,\n },\n JIRA_DOMAIN: {\n label: \"Jira Domain\",\n required: true,\n type: \"variable\",\n placeholder: \"your-domain.atlassian.net\",\n },\n JIRA_EMAIL: {\n label: \"Jira Email\",\n required: true,\n type: \"variable\",\n placeholder: \"your-email@example.com\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n jotform: {\n label: \"Jotform\",\n environmentMapping: {\n JOTFORM_TOKEN: \"$secrets.JOTFORM_TOKEN\",\n },\n helpText:\n \"Connect your Jotform account to manage forms, submissions, and automate form workflows\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to your [Jotform account](https://www.jotform.com/myaccount/api)\\n2. Navigate to **Settings** → **API**\\n3. Click **Create New Key**\\n4. Copy your **API Key**\",\n secrets: {\n JOTFORM_TOKEN: {\n label: \"API Key\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n kommo: {\n label: \"Kommo\",\n environmentMapping: {\n KOMMO_API_KEY: \"$secrets.KOMMO_API_KEY\",\n KOMMO_SUBDOMAIN: \"$vars.KOMMO_SUBDOMAIN\",\n },\n helpText:\n \"Connect your Kommo account to manage leads, contacts, and sales pipelines\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n KOMMO_API_KEY: {\n label: \"API Key\",\n required: true,\n },\n KOMMO_SUBDOMAIN: {\n label: \"Subdomain\",\n required: true,\n type: \"variable\",\n placeholder: \"your-subdomain\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n line: {\n label: \"LINE\",\n environmentMapping: {\n LINE_TOKEN: \"$secrets.LINE_TOKEN\",\n },\n helpText:\n \"Connect your LINE account to send messages, manage channels, and access the LINE Messaging API\",\n authMethods: {\n \"api-token\": {\n label: \"Channel Access Token\",\n helpText:\n \"1. Log in to the [LINE Developers Console](https://developers.line.biz/console)\\n2. Select your provider and channel\\n3. Go to the **Messaging API** tab\\n4. Issue or copy the **Channel access token (long-lived)**\",\n secrets: {\n LINE_TOKEN: {\n label: \"Channel Access Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n loops: {\n label: \"Loops\",\n environmentMapping: {\n LOOPS_TOKEN: \"$secrets.LOOPS_TOKEN\",\n },\n helpText:\n \"Connect your Loops account to send behavioral and transactional emails for your SaaS product\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Loops](https://app.loops.so)\\n2. Go to **Settings** → **API**\\n3. Click **Generate key**\\n4. Copy the generated API key\",\n secrets: {\n LOOPS_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"d2d561f5ff80136f69b4b5a31b9fb3c9\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n make: {\n label: \"Make\",\n environmentMapping: {\n MAKE_TOKEN: \"$secrets.MAKE_TOKEN\",\n },\n helpText:\n \"Connect your Make account to manage scenarios, organizations, and automation workflows\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n MAKE_TOKEN: {\n label: \"API Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n metabase: {\n label: \"Metabase\",\n environmentMapping: {\n METABASE_TOKEN: \"$secrets.METABASE_TOKEN\",\n METABASE_BASE_URL: \"$vars.METABASE_BASE_URL\",\n },\n helpText:\n \"Connect your Metabase instance to query data, manage dashboards, and automate analytics workflows\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to your Metabase instance as an admin\\n2. Go to **Admin** → **Settings** → **Authentication** → **API Keys**\\n3. Click **Create API Key**\\n4. Enter a name and select a group for the key\\n5. Copy the generated API key\",\n secrets: {\n METABASE_TOKEN: {\n label: \"API Key\",\n required: true,\n },\n METABASE_BASE_URL: {\n label: \"Base URL\",\n required: true,\n placeholder: \"https://mycompany.metabaseapp.com\",\n helpText:\n \"Your Metabase instance URL (e.g. 'https://mycompany.metabaseapp.com' for cloud or your self-hosted URL)\",\n type: \"variable\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n deel: {\n label: \"Deel\",\n environmentMapping: {\n DEEL_TOKEN: \"$secrets.DEEL_ACCESS_TOKEN\",\n },\n featureFlag: FeatureSwitchKey.DeelConnector,\n helpText:\n \"Connect your Deel account to access HR, payroll, and contractor data\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Deel to grant access.\",\n secrets: {\n DEEL_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n DEEL_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n DEEL_TOKEN: {\n label: \"API Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://app.deel.com/oauth2/authorize\",\n tokenUrl: \"https://app.deel.com/oauth2/tokens\",\n scopes: [\n \"contracts:read\",\n \"people:read\",\n \"organizations:read\",\n \"payslips:read\",\n \"time-off:read\",\n \"time-off:write\",\n \"invoice-adjustments:read\",\n \"invoice-adjustments:write\",\n ],\n },\n },\n deepseek: {\n label: \"DeepSeek\",\n environmentMapping: {\n DEEPSEEK_TOKEN: \"$secrets.DEEPSEEK_TOKEN\",\n },\n helpText:\n \"Connect your DeepSeek account to use DeepSeek AI models for chat completions, code generation, and reasoning tasks\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n DEEPSEEK_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"sk-...\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n clickup: {\n label: \"ClickUp\",\n environmentMapping: {\n CLICKUP_TOKEN: \"$secrets.CLICKUP_TOKEN\",\n },\n helpText:\n \"Connect your ClickUp account to manage tasks, projects, and team workflows\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n CLICKUP_TOKEN: {\n label: \"API Token\",\n required: true,\n placeholder: \"pk_...\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n cloudflare: {\n label: \"Cloudflare\",\n environmentMapping: {\n CLOUDFLARE_TOKEN: \"$secrets.CLOUDFLARE_TOKEN\",\n },\n helpText:\n \"Connect your Cloudflare account to manage DNS, zones, workers, and other Cloudflare services\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to the [Cloudflare Dashboard](https://dash.cloudflare.com)\\n2. Go to **My Profile** → **API Tokens**\\n3. Click **Create Token** and configure the required permissions\\n4. Copy the generated token\",\n secrets: {\n CLOUDFLARE_TOKEN: {\n label: \"API Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n cloudinary: {\n label: \"Cloudinary\",\n environmentMapping: {\n CLOUDINARY_TOKEN: \"$secrets.CLOUDINARY_TOKEN\",\n CLOUDINARY_API_SECRET: \"$secrets.CLOUDINARY_API_SECRET\",\n CLOUDINARY_CLOUD_NAME: \"$vars.CLOUDINARY_CLOUD_NAME\",\n },\n helpText:\n \"Connect your Cloudinary account to manage images, videos, and media assets with CDN delivery and transformations\",\n authMethods: {\n \"api-token\": {\n label: \"API Credentials\",\n helpText:\n \"1. Log in to the [Cloudinary Console](https://console.cloudinary.com/settings/api-keys)\\n2. Go to **Settings** → **API Keys**\\n3. Copy your **Cloud Name**, **API Key**, and **API Secret**\",\n secrets: {\n CLOUDINARY_TOKEN: {\n label: \"API Key\",\n required: true,\n },\n CLOUDINARY_API_SECRET: {\n label: \"API Secret\",\n required: true,\n },\n CLOUDINARY_CLOUD_NAME: {\n label: \"Cloud Name\",\n required: true,\n type: \"variable\",\n placeholder: \"your-cloud-name\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n cronlytic: {\n label: \"Cronlytic\",\n environmentMapping: {\n CRONLYTIC_API_KEY: \"$secrets.CRONLYTIC_API_KEY\",\n CRONLYTIC_USER_ID: \"$vars.CRONLYTIC_USER_ID\",\n },\n helpText:\n \"Connect your Cronlytic account to monitor cron jobs and scheduled tasks\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n CRONLYTIC_API_KEY: {\n label: \"API Key\",\n required: true,\n },\n CRONLYTIC_USER_ID: {\n label: \"User ID\",\n required: true,\n type: \"variable\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n \"customer-io\": {\n label: \"Customer.io\",\n environmentMapping: {\n CUSTOMERIO_APP_TOKEN: \"$secrets.CUSTOMERIO_APP_TOKEN\",\n },\n helpText:\n \"Connect your Customer.io account to send behavioral emails, SMS, and push notifications triggered by user events\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n CUSTOMERIO_APP_TOKEN: {\n label: \"App API Key\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n dify: {\n label: \"Dify\",\n environmentMapping: {\n DIFY_TOKEN: \"$secrets.DIFY_TOKEN\",\n },\n helpText:\n \"Connect your Dify account to build and manage AI-powered workflows, chatbots, and agentic applications\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n DIFY_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"app-...\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n figma: {\n label: \"Figma\",\n environmentMapping: {\n FIGMA_TOKEN: \"$secrets.FIGMA_ACCESS_TOKEN\",\n },\n featureFlag: FeatureSwitchKey.FigmaConnector,\n helpText: \"Connect your Figma account to access design files and projects\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Figma to grant access.\",\n secrets: {\n FIGMA_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n FIGMA_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n \"api-token\": {\n label: \"Personal Access Token\",\n secrets: {\n FIGMA_TOKEN: {\n label: \"Personal Access Token\",\n required: true,\n placeholder: \"figd_xxxxxxxx\",\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://www.figma.com/oauth\",\n tokenUrl: \"https://api.figma.com/v1/oauth/token\",\n scopes: [\n \"current_user:read\",\n \"file_content:read\",\n \"file_metadata:read\",\n \"file_versions:read\",\n \"projects:read\",\n \"file_comments:read\",\n \"file_comments:write\",\n \"library_assets:read\",\n \"library_content:read\",\n ],\n },\n },\n mercury: {\n label: \"Mercury\",\n environmentMapping: {\n MERCURY_TOKEN: \"$secrets.MERCURY_ACCESS_TOKEN\",\n },\n featureFlag: FeatureSwitchKey.MercuryConnector,\n helpText:\n \"Connect your Mercury account to access banking and financial data\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Mercury to grant access.\",\n secrets: {\n MERCURY_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n MERCURY_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to your [Mercury Dashboard](https://mercury.com)\\n2. Go to **Settings → Tokens**\\n3. Generate a new API token\\n4. Copy the token\",\n secrets: {\n MERCURY_TOKEN: {\n label: \"API Token\",\n required: true,\n placeholder: \"secret-token:mercury_production_...\",\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://oauth2.mercury.com/oauth2/auth\",\n tokenUrl: \"https://oauth2.mercury.com/oauth2/token\",\n scopes: [\"offline_access\"],\n },\n },\n minimax: {\n label: \"MiniMax\",\n environmentMapping: {\n MINIMAX_TOKEN: \"$secrets.MINIMAX_TOKEN\",\n },\n helpText:\n \"Connect your MiniMax account to access AI model APIs for text, voice, and video generation\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n MINIMAX_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-minimax-api-key\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n reportei: {\n label: \"Reportei\",\n environmentMapping: {\n REPORTEI_TOKEN: \"$secrets.REPORTEI_TOKEN\",\n },\n helpText:\n \"Connect your Reportei account to generate and manage marketing reports with automated analytics\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n REPORTEI_TOKEN: {\n label: \"API Token\",\n required: true,\n placeholder: \"your-reportei-api-token\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n serpapi: {\n label: \"SerpApi\",\n environmentMapping: {\n SERPAPI_TOKEN: \"$secrets.SERPAPI_TOKEN\",\n },\n helpText:\n \"Connect your SerpApi account to search Google, Bing, YouTube and other search engines programmatically\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n SERPAPI_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-serpapi-api-key\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n salesforce: {\n label: \"Salesforce\",\n environmentMapping: {\n SALESFORCE_TOKEN: \"$secrets.SALESFORCE_TOKEN\",\n SALESFORCE_INSTANCE: \"$vars.SALESFORCE_INSTANCE\",\n },\n helpText:\n \"Connect your Salesforce account to manage CRM data, contacts, leads, and sales workflows\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n SALESFORCE_TOKEN: {\n label: \"API Token\",\n required: true,\n placeholder: \"00D...\",\n },\n SALESFORCE_INSTANCE: {\n label: \"Instance\",\n required: true,\n placeholder: \"mycompany\",\n helpText:\n \"Your Salesforce instance name (e.g. 'mycompany' from mycompany.my.salesforce.com)\",\n type: \"variable\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n reddit: {\n label: \"Reddit\",\n environmentMapping: {\n REDDIT_TOKEN: \"$secrets.REDDIT_ACCESS_TOKEN\",\n },\n featureFlag: FeatureSwitchKey.RedditConnector,\n helpText:\n \"Connect your Reddit account to access Reddit discussions and content\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Reddit to grant access.\",\n secrets: {\n REDDIT_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n REDDIT_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://www.reddit.com/api/v1/authorize\",\n tokenUrl: \"https://www.reddit.com/api/v1/access_token\",\n scopes: [\"identity\", \"read\"],\n },\n },\n strava: {\n label: \"Strava\",\n environmentMapping: {\n STRAVA_TOKEN: \"$secrets.STRAVA_ACCESS_TOKEN\",\n },\n helpText:\n \"Connect your Strava account to access activities and athlete data\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Strava to grant access.\",\n secrets: {\n STRAVA_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n STRAVA_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://www.strava.com/oauth/authorize\",\n tokenUrl: \"https://www.strava.com/oauth/token\",\n scopes: [\n \"read\",\n \"profile:read_all\",\n \"activity:read_all\",\n \"activity:write\",\n ],\n },\n },\n x: {\n label: \"X\",\n environmentMapping: {\n X_TOKEN: \"$secrets.X_ACCESS_TOKEN\",\n },\n helpText:\n \"Connect your X (Twitter) account to read tweets, timelines, and search\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with X to grant read access.\",\n secrets: {\n X_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n X_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://twitter.com/i/oauth2/authorize\",\n tokenUrl: \"https://api.twitter.com/2/oauth2/token\",\n // https://docs.x.com/fundamentals/authentication/oauth-2-0/authorization-code\n scopes: [\n \"tweet.read\", // All the Tweets you can view, including Tweets from protected accounts.\n \"tweet.write\", // Tweet and Retweet for you.\n \"tweet.moderate.write\", // Hide and unhide replies to your Tweets.\n \"users.email\", // Email from an authenticated user.\n \"users.read\", // Any account you can view, including protected accounts.\n \"follows.read\", // People who follow you and people who you follow.\n \"follows.write\", // Follow and unfollow people for you.\n \"offline.access\", // Stay connected to your account until you revoke access.\n \"space.read\", // All the Spaces you can view.\n \"mute.read\", // Accounts you've muted.\n \"mute.write\", // Mute and unmute accounts for you.\n \"like.read\", // Tweets you've liked and likes you can view.\n \"like.write\", // Like and un-like Tweets for you.\n \"list.read\", // Lists, list members, and list followers of lists you've created or are a member of, including private lists.\n \"list.write\", // Create and manage Lists for you.\n \"block.read\", // Accounts you've blocked.\n \"block.write\", // Block and unblock accounts for you.\n \"bookmark.read\", // Get Bookmarked Tweets from an authenticated user.\n \"bookmark.write\", // Bookmark and remove Bookmarks from Tweets.\n \"dm.read\", // All the Direct Messages you can view, including Direct Messages from protected accounts.\n \"dm.write\", // Send and manage Direct Messages for you.\n \"media.write\", // Upload media.\n ],\n },\n },\n neon: {\n label: \"Neon\",\n environmentMapping: {\n NEON_TOKEN: \"$secrets.NEON_ACCESS_TOKEN\",\n },\n featureFlag: FeatureSwitchKey.NeonConnector,\n helpText:\n \"Connect your Neon account to manage serverless Postgres databases and projects\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Neon to grant access.\",\n secrets: {\n NEON_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n NEON_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n NEON_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"napi_xxxxxxxx\",\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://oauth2.neon.tech/oauth2/auth\",\n tokenUrl: \"https://oauth2.neon.tech/oauth2/token\",\n scopes: [\n \"openid\",\n \"offline_access\",\n \"urn:neoncloud:projects:read\",\n \"urn:neoncloud:projects:create\",\n \"urn:neoncloud:projects:update\",\n \"urn:neoncloud:projects:delete\",\n ],\n },\n },\n gamma: {\n label: \"Gamma\",\n environmentMapping: {\n GAMMA_TOKEN: \"$secrets.GAMMA_TOKEN\",\n },\n helpText:\n \"Connect your Gamma account to generate presentations, documents, and websites with AI\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Gamma](https://gamma.app)\\n2. Go to [API Keys](https://gamma.app/settings/api-keys) (Settings > API Keys)\\n3. Click **Create API key**\\n4. Copy the key (it is only shown once)\",\n secrets: {\n GAMMA_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"sk-gamma-...\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n \"garmin-connect\": {\n label: \"Garmin Connect\",\n environmentMapping: {\n GARMIN_CONNECT_TOKEN: \"$secrets.GARMIN_CONNECT_ACCESS_TOKEN\",\n },\n featureFlag: FeatureSwitchKey.GarminConnectConnector,\n helpText:\n \"Connect your Garmin Connect account to access wellness and activity data\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Garmin Connect to grant access.\",\n secrets: {\n GARMIN_CONNECT_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n GARMIN_CONNECT_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://connect.garmin.com/oauth2Confirm\",\n tokenUrl: \"https://diauth.garmin.com/di-oauth2-service/oauth/token\",\n scopes: [],\n },\n },\n vercel: {\n label: \"Vercel\",\n environmentMapping: {\n VERCEL_TOKEN: \"$secrets.VERCEL_ACCESS_TOKEN\",\n },\n helpText:\n \"Connect your Vercel account to manage deployments, projects, and domains\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Vercel to grant access.\",\n secrets: {\n VERCEL_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n tokenUrl: \"https://api.vercel.com/v2/oauth/access_token\",\n scopes: [],\n },\n },\n sentry: {\n label: \"Sentry\",\n environmentMapping: {\n SENTRY_TOKEN: \"$secrets.SENTRY_ACCESS_TOKEN\",\n },\n helpText:\n \"Connect your Sentry account to access error tracking and project data\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Sentry to grant access.\",\n secrets: {\n SENTRY_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n SENTRY_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://sentry.io/oauth/authorize/\",\n tokenUrl: \"https://sentry.io/oauth/token/\",\n scopes: [\n \"org:read\",\n \"project:read\",\n \"team:read\",\n \"member:read\",\n \"event:read\",\n \"event:write\",\n ],\n },\n },\n posthog: {\n label: \"PostHog\",\n environmentMapping: {\n POSTHOG_TOKEN: \"$secrets.POSTHOG_ACCESS_TOKEN\",\n },\n featureFlag: FeatureSwitchKey.PosthogConnector,\n helpText:\n \"Connect your PostHog account to access product analytics, feature flags, and experiments\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with PostHog to grant access.\",\n secrets: {\n POSTHOG_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n POSTHOG_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n \"api-token\": {\n label: \"Personal API Key\",\n secrets: {\n POSTHOG_TOKEN: {\n label: \"Personal API Key\",\n required: true,\n placeholder: \"phx_...\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n oauth: {\n authorizationUrl: \"https://us.posthog.com/oauth/authorize\",\n tokenUrl: \"https://us.posthog.com/oauth/token\",\n scopes: [\n \"openid\",\n \"profile\",\n \"email\",\n \"user:read\",\n \"project:read\",\n \"feature_flag:read\",\n \"feature_flag:write\",\n \"experiment:read\",\n \"experiment:write\",\n \"insight:read\",\n \"insight:write\",\n \"dashboard:read\",\n \"dashboard:write\",\n \"action:read\",\n \"action:write\",\n \"annotation:read\",\n \"annotation:write\",\n \"cohort:read\",\n \"cohort:write\",\n \"event_definition:read\",\n \"query:read\",\n \"survey:read\",\n \"survey:write\",\n \"error_tracking:read\",\n ],\n },\n },\n productlane: {\n label: \"Productlane\",\n environmentMapping: {\n PRODUCTLANE_TOKEN: \"$secrets.PRODUCTLANE_TOKEN\",\n },\n helpText:\n \"Connect your Productlane account to manage feedback, insights, changelogs, and customer data\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n PRODUCTLANE_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-productlane-api-key\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n \"intervals-icu\": {\n label: \"Intervals.icu\",\n environmentMapping: {\n INTERVALS_ICU_TOKEN: \"$secrets.INTERVALS_ICU_ACCESS_TOKEN\",\n },\n helpText:\n \"Connect your Intervals.icu account to access training, activity, wellness, and calendar data\",\n authMethods: {\n oauth: {\n label: \"OAuth\",\n helpText: \"Sign in with Intervals.icu to grant access.\",\n secrets: {\n INTERVALS_ICU_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://intervals.icu/oauth/authorize\",\n tokenUrl: \"https://intervals.icu/api/oauth/token\",\n scopes: [\"ACTIVITY\", \"WELLNESS\", \"CALENDAR\", \"SETTINGS\", \"LIBRARY\"],\n },\n },\n monday: {\n label: \"Monday.com\",\n environmentMapping: {\n MONDAY_TOKEN: \"$secrets.MONDAY_ACCESS_TOKEN\",\n },\n helpText:\n \"Connect your Monday.com account to manage boards, items, and workflows\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Monday.com to grant access.\",\n secrets: {\n MONDAY_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n MONDAY_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://auth.monday.com/oauth2/authorize\",\n tokenUrl: \"https://auth.monday.com/oauth2/token\",\n scopes: [\n \"me:read\",\n \"boards:read\",\n \"boards:write\",\n \"docs:read\",\n \"docs:write\",\n \"workspaces:read\",\n \"users:read\",\n \"account:read\",\n \"updates:read\",\n \"updates:write\",\n \"notifications:write\",\n \"assets:read\",\n \"tags:read\",\n \"teams:read\",\n ],\n },\n },\n calendly: {\n label: \"Calendly\",\n environmentMapping: {\n CALENDLY_TOKEN: \"$secrets.CALENDLY_TOKEN\",\n },\n helpText:\n \"Connect your Calendly account to access scheduling data, event types, and invitee information\",\n authMethods: {\n \"api-token\": {\n label: \"Personal Access Token\",\n helpText:\n \"1. Log in to [Calendly](https://calendly.com)\\n2. Go to **Integrations > API & Webhooks**\\n3. Generate a Personal Access Token\\n4. Copy the token\",\n secrets: {\n CALENDLY_TOKEN: {\n label: \"Personal Access Token\",\n required: true,\n placeholder: \"your-calendly-token\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n canva: {\n label: \"Canva\",\n environmentMapping: {\n CANVA_TOKEN: \"$secrets.CANVA_ACCESS_TOKEN\",\n },\n featureFlag: FeatureSwitchKey.CanvaConnector,\n helpText:\n \"Connect your Canva account to access designs, assets, and projects\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Canva to grant access.\",\n secrets: {\n CANVA_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n CANVA_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://www.canva.com/api/oauth/authorize\",\n tokenUrl: \"https://api.canva.com/rest/v1/oauth/token\",\n scopes: [\n \"asset:read\",\n \"asset:write\",\n \"brandtemplate:content:read\",\n \"brandtemplate:meta:read\",\n \"comment:read\",\n \"comment:write\",\n \"design:content:read\",\n \"design:content:write\",\n \"design:meta:read\",\n \"folder:read\",\n \"folder:write\",\n \"profile:read\",\n ],\n },\n },\n \"cal-com\": {\n label: \"Cal.com\",\n environmentMapping: {\n CALCOM_TOKEN: \"$secrets.CALCOM_TOKEN\",\n },\n helpText:\n \"Connect your Cal.com account to manage scheduling, bookings, and calendar events\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [Cal.com](https://app.cal.com)\\n2. Go to **Settings** → **Developer** → **API Keys**\\n3. Click **Create API Key**\\n4. Copy the generated key\",\n secrets: {\n CALCOM_TOKEN: {\n label: \"API Token\",\n required: true,\n placeholder: \"cal_live_xxxxxxxx\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n xero: {\n label: \"Xero\",\n environmentMapping: {\n XERO_TOKEN: \"$secrets.XERO_ACCESS_TOKEN\",\n },\n helpText:\n \"Connect your Xero account to access accounting data, invoices, and contacts\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Xero to grant access.\",\n secrets: {\n XERO_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n XERO_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://login.xero.com/identity/connect/authorize\",\n tokenUrl: \"https://identity.xero.com/connect/token\",\n scopes: [\n \"openid\",\n \"profile\",\n \"email\",\n \"offline_access\",\n \"accounting.contacts\",\n \"accounting.settings\",\n \"accounting.invoices\",\n \"accounting.payments\",\n \"accounting.banktransactions\",\n \"accounting.manualjournals\",\n \"accounting.attachments\",\n \"accounting.budgets.read\",\n \"accounting.reports.profitandloss.read\",\n \"accounting.reports.balancesheet.read\",\n \"accounting.reports.trialbalance.read\",\n \"accounting.reports.aged.read\",\n \"accounting.reports.executivesummary.read\",\n \"accounting.reports.banksummary.read\",\n \"accounting.reports.budgetsummary.read\",\n \"files\",\n \"assets\",\n \"projects\",\n ],\n },\n },\n supabase: {\n label: \"Supabase\",\n environmentMapping: {\n SUPABASE_TOKEN: \"$secrets.SUPABASE_ACCESS_TOKEN\",\n },\n featureFlag: FeatureSwitchKey.SupabaseConnector,\n helpText:\n \"Connect your Supabase account to manage projects, databases, and APIs\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Supabase to grant access.\",\n secrets: {\n SUPABASE_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n SUPABASE_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n \"api-token\": {\n label: \"Service Role Key\",\n secrets: {\n SUPABASE_TOKEN: {\n label: \"Service Role Key\",\n required: true,\n placeholder: \"eyJhbGci... or sb_secret_...\",\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://api.supabase.com/v1/oauth/authorize\",\n tokenUrl: \"https://api.supabase.com/v1/oauth/token\",\n scopes: [\n \"organizations:read\",\n \"projects:read\",\n \"projects:write\",\n \"database:read\",\n \"database:write\",\n \"secrets:read\",\n \"rest:read\",\n \"rest:write\",\n \"auth:read\",\n \"analytics:read\",\n \"environment:read\",\n \"domains:read\",\n ],\n },\n },\n todoist: {\n label: \"Todoist\",\n environmentMapping: {\n TODOIST_TOKEN: \"$secrets.TODOIST_ACCESS_TOKEN\",\n },\n helpText:\n \"Connect your Todoist account to manage tasks, projects, labels, and comments\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Todoist to grant access.\",\n secrets: {\n TODOIST_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://todoist.com/oauth/authorize\",\n tokenUrl: \"https://todoist.com/oauth/access_token\",\n scopes: [\"data:read_write\", \"data:delete\", \"project:delete\"],\n },\n },\n webflow: {\n label: \"Webflow\",\n environmentMapping: {\n WEBFLOW_TOKEN: \"$secrets.WEBFLOW_ACCESS_TOKEN\",\n },\n featureFlag: FeatureSwitchKey.WebflowConnector,\n helpText:\n \"Connect your Webflow account to manage sites, pages, CMS collections, and ecommerce\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Webflow to grant access.\",\n secrets: {\n WEBFLOW_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n },\n },\n \"api-token\": {\n label: \"Site Token\",\n secrets: {\n WEBFLOW_TOKEN: {\n label: \"Site Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://webflow.com/oauth/authorize\",\n tokenUrl: \"https://api.webflow.com/oauth/access_token\",\n scopes: [\n \"authorized_user:read\",\n \"sites:read\",\n \"sites:write\",\n \"pages:read\",\n \"pages:write\",\n \"cms:read\",\n \"cms:write\",\n \"assets:read\",\n \"assets:write\",\n \"forms:read\",\n \"ecommerce:read\",\n \"ecommerce:write\",\n \"users:read\",\n \"workspace:read\",\n \"custom_code:read\",\n \"custom_code:write\",\n ],\n },\n },\n wrike: {\n label: \"Wrike\",\n environmentMapping: {\n WRIKE_TOKEN: \"$secrets.WRIKE_TOKEN\",\n },\n helpText:\n \"Connect your Wrike account to manage projects, tasks, folders, and workflows\",\n authMethods: {\n \"api-token\": {\n label: \"Permanent Access Token\",\n secrets: {\n WRIKE_TOKEN: {\n label: \"Permanent Access Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n \"outlook-mail\": {\n label: \"Outlook Mail\",\n environmentMapping: {\n OUTLOOK_MAIL_TOKEN: \"$secrets.OUTLOOK_MAIL_ACCESS_TOKEN\",\n },\n featureFlag: FeatureSwitchKey.OutlookMailConnector,\n helpText: \"Connect your Microsoft Outlook account to send and read emails\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Microsoft to grant Outlook Mail access.\",\n secrets: {\n OUTLOOK_MAIL_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n OUTLOOK_MAIL_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl:\n \"https://login.microsoftonline.com/common/oauth2/v2.0/authorize\",\n tokenUrl: \"https://login.microsoftonline.com/common/oauth2/v2.0/token\",\n scopes: [\"Mail.ReadWrite\", \"Mail.Send\", \"User.Read\", \"offline_access\"],\n },\n },\n \"outlook-calendar\": {\n label: \"Outlook Calendar\",\n environmentMapping: {\n OUTLOOK_CALENDAR_TOKEN: \"$secrets.OUTLOOK_CALENDAR_ACCESS_TOKEN\",\n },\n featureFlag: FeatureSwitchKey.OutlookCalendarConnector,\n helpText:\n \"Connect your Microsoft account to access and manage Outlook calendar events\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Microsoft to grant Outlook Calendar access.\",\n secrets: {\n OUTLOOK_CALENDAR_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n OUTLOOK_CALENDAR_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl:\n \"https://login.microsoftonline.com/common/oauth2/v2.0/authorize\",\n tokenUrl: \"https://login.microsoftonline.com/common/oauth2/v2.0/token\",\n scopes: [\"Calendars.ReadWrite\", \"User.Read\", \"offline_access\"],\n },\n },\n asana: {\n label: \"Asana\",\n environmentMapping: {\n ASANA_TOKEN: \"$secrets.ASANA_ACCESS_TOKEN\",\n },\n helpText:\n \"Connect your Asana account to manage tasks, projects, portfolios, goals, and team workflows\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Asana to grant access.\",\n secrets: {\n ASANA_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n ASANA_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://app.asana.com/-/oauth_authorize\",\n tokenUrl: \"https://app.asana.com/-/oauth_token\",\n scopes: [],\n },\n },\n atlassian: {\n label: \"Atlassian (Jira/Confluence)\",\n environmentMapping: {\n ATLASSIAN_TOKEN: \"$secrets.ATLASSIAN_TOKEN\",\n ATLASSIAN_EMAIL: \"$vars.ATLASSIAN_EMAIL\",\n ATLASSIAN_DOMAIN: \"$vars.ATLASSIAN_DOMAIN\",\n },\n helpText:\n \"Connect your Atlassian account to manage Jira issues, Confluence pages, and other Atlassian products\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [Atlassian](https://id.atlassian.com/manage-profile/security/api-tokens)\\n2. Click **Create API token**\\n3. Give it a label and click **Create**\\n4. Copy the generated token\",\n secrets: {\n ATLASSIAN_TOKEN: {\n label: \"API Token\",\n required: true,\n placeholder: \"your-api-token\",\n },\n ATLASSIAN_EMAIL: {\n label: \"Email\",\n required: true,\n placeholder: \"you@example.com\",\n helpText:\n \"The email address associated with your Atlassian account\",\n type: \"variable\",\n },\n ATLASSIAN_DOMAIN: {\n label: \"Domain\",\n required: true,\n placeholder: \"mycompany\",\n helpText:\n \"Your Atlassian domain (e.g. 'mycompany' from mycompany.atlassian.net)\",\n type: \"variable\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n \"meta-ads\": {\n label: \"Meta Ads\",\n environmentMapping: {\n META_ADS_TOKEN: \"$secrets.META_ADS_ACCESS_TOKEN\",\n },\n featureFlag: FeatureSwitchKey.MetaAdsConnector,\n helpText:\n \"Connect your Meta Ads Manager account to manage ad campaigns, audiences, and insights\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Facebook to grant access to Ads Manager.\",\n secrets: {\n META_ADS_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://www.facebook.com/v22.0/dialog/oauth\",\n tokenUrl: \"https://graph.facebook.com/v22.0/oauth/access_token\",\n scopes: [\"ads_management\", \"ads_read\", \"business_management\"],\n },\n },\n stripe: {\n label: \"Stripe\",\n environmentMapping: {\n STRIPE_TOKEN: \"$secrets.STRIPE_ACCESS_TOKEN\",\n },\n featureFlag: FeatureSwitchKey.StripeConnector,\n helpText:\n \"Connect your Stripe account to manage payments, customers, and subscriptions\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Stripe to grant access.\",\n secrets: {\n STRIPE_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n STRIPE_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: false,\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://connect.stripe.com/oauth/authorize\",\n tokenUrl: \"https://connect.stripe.com/oauth/token\",\n scopes: [\"read_write\"],\n },\n },\n openai: {\n label: \"OpenAI\",\n environmentMapping: {\n OPENAI_TOKEN: \"$secrets.OPENAI_TOKEN\",\n },\n helpText:\n \"Connect your OpenAI account to access GPT models, embeddings, image generation, and other AI capabilities\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n OPENAI_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"sk-...\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n similarweb: {\n label: \"SimilarWeb\",\n environmentMapping: {\n SIMILARWEB_TOKEN: \"$secrets.SIMILARWEB_TOKEN\",\n },\n helpText:\n \"Connect your SimilarWeb account to access website traffic analytics, competitive intelligence, and market insights\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n SIMILARWEB_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-similarweb-api-key\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n perplexity: {\n label: \"Perplexity\",\n environmentMapping: {\n PERPLEXITY_TOKEN: \"$secrets.PERPLEXITY_TOKEN\",\n },\n helpText:\n \"Connect your Perplexity account to access AI-powered search and research capabilities via the Sonar API\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n PERPLEXITY_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"pplx-...\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n plausible: {\n label: \"Plausible\",\n environmentMapping: {\n PLAUSIBLE_TOKEN: \"$secrets.PLAUSIBLE_TOKEN\",\n },\n helpText:\n \"Connect your Plausible Analytics account to access website traffic analytics, visitor stats, and site management\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Plausible Analytics](https://plausible.io)\\n2. Go to **Account Settings** → **API Keys**\\n3. Click **New API Key** and choose **Stats API**\\n4. Copy the key (it is only shown once)\",\n secrets: {\n PLAUSIBLE_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-plausible-api-key\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n mailchimp: {\n label: \"Mailchimp\",\n environmentMapping: {\n MAILCHIMP_TOKEN: \"$secrets.MAILCHIMP_ACCESS_TOKEN\",\n },\n featureFlag: FeatureSwitchKey.MailchimpConnector,\n helpText:\n \"Connect your Mailchimp account to manage audiences, campaigns, templates, and automations\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Mailchimp to grant access.\",\n secrets: {\n MAILCHIMP_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n },\n },\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n MAILCHIMP_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-us00\",\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://login.mailchimp.com/oauth2/authorize\",\n tokenUrl: \"https://login.mailchimp.com/oauth2/token\",\n scopes: [],\n },\n },\n chatwoot: {\n label: \"Chatwoot\",\n environmentMapping: {\n CHATWOOT_TOKEN: \"$secrets.CHATWOOT_TOKEN\",\n },\n helpText:\n \"Connect your Chatwoot account to manage conversations, contacts, and customer support workflows\",\n authMethods: {\n \"api-token\": {\n label: \"API Access Token\",\n secrets: {\n CHATWOOT_TOKEN: {\n label: \"API Access Token\",\n required: true,\n placeholder: \"your-chatwoot-access-token\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n resend: {\n label: \"Resend\",\n environmentMapping: {\n RESEND_TOKEN: \"$secrets.RESEND_TOKEN\",\n },\n featureFlag: FeatureSwitchKey.ResendConnector,\n helpText:\n \"Connect your Resend account to send transactional emails, manage domains, audiences, and contacts\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n RESEND_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"re_xxxxxxxxxx\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n revenuecat: {\n label: \"RevenueCat\",\n environmentMapping: {\n REVENUECAT_TOKEN: \"$secrets.REVENUECAT_TOKEN\",\n },\n helpText:\n \"Connect your RevenueCat account to manage in-app subscriptions, purchases, and customer data\",\n authMethods: {\n \"api-token\": {\n label: \"Secret API Key\",\n secrets: {\n REVENUECAT_TOKEN: {\n label: \"Secret API Key\",\n required: true,\n placeholder: \"sk_xxxxxxxxxxxxxxxx\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n pdf4me: {\n label: \"PDF4me\",\n environmentMapping: {\n PDF4ME_TOKEN: \"$secrets.PDF4ME_TOKEN\",\n },\n helpText:\n \"Connect your PDF4me account to convert, merge, split, compress, and manipulate PDF documents\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n PDF4ME_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-pdf4me-api-key\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n apify: {\n label: \"Apify\",\n environmentMapping: {\n APIFY_TOKEN: \"$secrets.APIFY_TOKEN\",\n },\n helpText:\n \"Connect your Apify account to run web scraping actors, manage datasets, and automate browser tasks\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [Apify Console](https://console.apify.com)\\n2. Go to **Settings > Integrations**\\n3. Copy your **Personal API token**\",\n secrets: {\n APIFY_TOKEN: {\n label: \"API Token\",\n required: true,\n placeholder: \"apify_api_xxxxxxxx\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n bitrix: {\n label: \"Bitrix24\",\n environmentMapping: {\n BITRIX_WEBHOOK_URL: \"$secrets.BITRIX_WEBHOOK_URL\",\n },\n helpText:\n \"Connect your Bitrix24 account to manage CRM, tasks, and workflows\",\n authMethods: {\n \"api-token\": {\n label: \"Webhook URL\",\n secrets: {\n BITRIX_WEBHOOK_URL: {\n label: \"Webhook URL\",\n required: true,\n placeholder: \"https://your-domain.bitrix24.com/rest/1/xxx/\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n brevo: {\n label: \"Brevo\",\n environmentMapping: {\n BREVO_TOKEN: \"$secrets.BREVO_TOKEN\",\n },\n helpText:\n \"Connect your Brevo account to manage email campaigns, transactional emails, and CRM contacts\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Brevo](https://app.brevo.com)\\n2. Go to **Settings** → **SMTP & API** → **API Keys**\\n3. Copy your API key\",\n secrets: {\n BREVO_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"xkeysib-...\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n \"brave-search\": {\n label: \"Brave Search\",\n environmentMapping: {\n BRAVE_API_KEY: \"$secrets.BRAVE_API_KEY\",\n },\n helpText:\n \"Connect your Brave Search account to perform privacy-focused web, image, video, and news searches\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n BRAVE_API_KEY: {\n label: \"API Key\",\n required: true,\n placeholder: \"BSAxxxxxxxxxxxxxxxx\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n \"bright-data\": {\n label: \"Bright Data\",\n environmentMapping: {\n BRIGHTDATA_TOKEN: \"$secrets.BRIGHTDATA_TOKEN\",\n },\n helpText:\n \"Connect your Bright Data account to scrape websites, manage proxies, and access web data\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [Bright Data](https://brightdata.com/cp)\\n2. Go to **Account settings**\\n3. Click **Add API key** and configure permissions\\n4. Copy the token (shown only once)\",\n secrets: {\n BRIGHTDATA_TOKEN: {\n label: \"API Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n browserbase: {\n label: \"Browserbase\",\n environmentMapping: {\n BROWSERBASE_TOKEN: \"$secrets.BROWSERBASE_TOKEN\",\n BROWSERBASE_PROJECT_ID: \"$vars.BROWSERBASE_PROJECT_ID\",\n },\n helpText:\n \"Connect your Browserbase account to create browser sessions, persist contexts, and automate cloud browsers\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n BROWSERBASE_TOKEN: {\n label: \"API Token\",\n required: true,\n },\n BROWSERBASE_PROJECT_ID: {\n label: \"Project ID\",\n required: true,\n type: \"variable\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n browserless: {\n label: \"Browserless\",\n environmentMapping: {\n BROWSERLESS_TOKEN: \"$secrets.BROWSERLESS_TOKEN\",\n },\n helpText:\n \"Connect your Browserless account to take screenshots, generate PDFs, scrape pages, and automate headless browsers\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n BROWSERLESS_TOKEN: {\n label: \"API Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n fireflies: {\n label: \"Fireflies\",\n environmentMapping: {\n FIREFLIES_TOKEN: \"$secrets.FIREFLIES_TOKEN\",\n },\n helpText:\n \"Connect your Fireflies.ai account to transcribe and analyze meetings\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n FIREFLIES_TOKEN: {\n label: \"API Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n firecrawl: {\n label: \"Firecrawl\",\n environmentMapping: {\n FIRECRAWL_TOKEN: \"$secrets.FIRECRAWL_TOKEN\",\n },\n helpText:\n \"Connect your Firecrawl account to scrape webpages, crawl websites, and extract structured data\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [Firecrawl](https://www.firecrawl.dev)\\n2. Go to your **Dashboard**\\n3. Copy your **API Key**\",\n secrets: {\n FIRECRAWL_TOKEN: {\n label: \"API Token\",\n required: true,\n placeholder: \"fc-xxxxxxxx\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n scrapeninja: {\n label: \"ScrapeNinja\",\n environmentMapping: {\n SCRAPENINJA_TOKEN: \"$secrets.SCRAPENINJA_TOKEN\",\n },\n helpText:\n \"Connect your ScrapeNinja account to scrape web pages with Chrome TLS fingerprint and JS rendering\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n SCRAPENINJA_TOKEN: {\n label: \"API Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n pdfco: {\n label: \"PDF.co\",\n environmentMapping: {\n PDFCO_TOKEN: \"$secrets.PDFCO_TOKEN\",\n },\n helpText:\n \"Connect your PDF.co account to convert, merge, split, and extract data from PDF documents via API\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n PDFCO_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-pdfco-api-key\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n elevenlabs: {\n label: \"ElevenLabs\",\n environmentMapping: {\n ELEVENLABS_TOKEN: \"$secrets.ELEVENLABS_TOKEN\",\n },\n helpText:\n \"Connect your ElevenLabs account to generate speech, clone voices, manage audio projects, and access sound effects\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n ELEVENLABS_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-elevenlabs-api-key\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n explorium: {\n label: \"Explorium\",\n environmentMapping: {\n EXPLORIUM_TOKEN: \"$secrets.EXPLORIUM_TOKEN\",\n },\n helpText:\n \"Connect your Explorium account to access business data enrichment, prospect discovery, and AI-powered data insights\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n EXPLORIUM_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-explorium-api-key\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n devto: {\n label: \"Dev.to\",\n environmentMapping: {\n DEVTO_TOKEN: \"$secrets.DEVTO_TOKEN\",\n },\n helpText:\n \"Connect your Dev.to account to publish articles, manage posts, and interact with the developer community\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n DEVTO_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-devto-api-key\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n fal: {\n label: \"fal.ai\",\n environmentMapping: {\n FAL_TOKEN: \"$secrets.FAL_TOKEN\",\n },\n helpText:\n \"Connect your fal.ai account to run AI models for image generation, video generation, and other AI tasks\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n FAL_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"fal_...\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n granola: {\n label: \"Granola\",\n environmentMapping: {\n GRANOLA_TOKEN: \"$secrets.GRANOLA_TOKEN\",\n },\n helpText:\n \"Connect your Granola account to access meeting notes, transcripts, summaries, and calendar event details\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n GRANOLA_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-granola-api-key\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n podchaser: {\n label: \"Podchaser\",\n environmentMapping: {\n PODCHASER_TOKEN: \"$secrets.PODCHASER_TOKEN\",\n },\n helpText:\n \"Connect your Podchaser account to search podcasts, episodes, creators, and access podcast industry data\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n PODCHASER_TOKEN: {\n label: \"API Token\",\n required: true,\n placeholder: \"your-podchaser-access-token\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n pushinator: {\n label: \"Pushinator\",\n environmentMapping: {\n PUSHINATOR_TOKEN: \"$secrets.PUSHINATOR_TOKEN\",\n },\n helpText:\n \"Connect your Pushinator account to send push notifications to mobile devices\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n PUSHINATOR_TOKEN: {\n label: \"API Token\",\n required: true,\n placeholder: \"your-pushinator-api-token\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n qdrant: {\n label: \"Qdrant\",\n environmentMapping: {\n QDRANT_TOKEN: \"$secrets.QDRANT_TOKEN\",\n QDRANT_BASE_URL: \"$vars.QDRANT_BASE_URL\",\n },\n helpText:\n \"Connect your Qdrant account to store, search, and manage vector embeddings\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Log in to [Qdrant Cloud](https://cloud.qdrant.io)\\n2. Open your cluster's detail page and go to **API Keys**\\n3. Click **Create** and configure your key\\n4. Copy the key (shown only once)\",\n secrets: {\n QDRANT_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-qdrant-api-key\",\n },\n QDRANT_BASE_URL: {\n label: \"Cluster URL\",\n required: true,\n placeholder: \"https://your-cluster.region.cloud.qdrant.io:6333\",\n helpText:\n \"Your Qdrant cluster URL (e.g. 'https://abc123.us-east4-0.gcp.cloud.qdrant.io:6333')\",\n type: \"variable\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n qiita: {\n label: \"Qiita\",\n environmentMapping: {\n QIITA_TOKEN: \"$secrets.QIITA_TOKEN\",\n },\n helpText:\n \"Connect your Qiita account to search, read, and publish technical articles\",\n authMethods: {\n \"api-token\": {\n label: \"Access Token\",\n secrets: {\n QIITA_TOKEN: {\n label: \"Access Token\",\n required: true,\n placeholder: \"your-qiita-access-token\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n zeptomail: {\n label: \"ZeptoMail\",\n environmentMapping: {\n ZEPTOMAIL_TOKEN: \"$secrets.ZEPTOMAIL_TOKEN\",\n },\n helpText:\n \"Connect your ZeptoMail account to send transactional emails via Zoho's email delivery service\",\n authMethods: {\n \"api-token\": {\n label: \"Send Mail Token\",\n secrets: {\n ZEPTOMAIL_TOKEN: {\n label: \"Send Mail Token\",\n required: true,\n placeholder: \"your-zeptomail-send-mail-token\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n runway: {\n label: \"Runway\",\n environmentMapping: {\n RUNWAY_TOKEN: \"$secrets.RUNWAY_TOKEN\",\n },\n helpText:\n \"Connect your Runway account to generate AI videos from images, text, or video inputs\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n RUNWAY_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-runway-api-key\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n shortio: {\n label: \"Short.io\",\n environmentMapping: {\n SHORTIO_TOKEN: \"$secrets.SHORTIO_TOKEN\",\n },\n helpText:\n \"Connect your Short.io account to create and manage short links and track click analytics\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n SHORTIO_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-shortio-api-key\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n streak: {\n label: \"Streak\",\n environmentMapping: {\n STREAK_TOKEN: \"$secrets.STREAK_TOKEN\",\n },\n helpText:\n \"Connect your Streak account to manage CRM pipelines, contacts, and deals inside Gmail\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n STREAK_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-streak-api-key\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n supadata: {\n label: \"Supadata\",\n environmentMapping: {\n SUPADATA_TOKEN: \"$secrets.SUPADATA_TOKEN\",\n },\n helpText:\n \"Connect your Supadata account to extract YouTube transcripts, channel data, and video metadata\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n SUPADATA_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-supadata-api-key\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n tavily: {\n label: \"Tavily\",\n environmentMapping: {\n TAVILY_TOKEN: \"$secrets.TAVILY_TOKEN\",\n },\n helpText:\n \"Connect your Tavily account to perform AI-optimized web searches and content extraction\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n TAVILY_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"tvly-...\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n tldv: {\n label: \"tl;dv\",\n environmentMapping: {\n TLDV_TOKEN: \"$secrets.TLDV_TOKEN\",\n },\n helpText:\n \"Connect your tl;dv account to access meeting recordings, transcripts, and AI-generated notes\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n TLDV_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-tldv-api-key\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n twenty: {\n label: \"Twenty\",\n environmentMapping: {\n TWENTY_TOKEN: \"$secrets.TWENTY_TOKEN\",\n },\n helpText:\n \"Connect your Twenty CRM account to manage contacts, companies, and deals\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n TWENTY_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-twenty-api-key\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n youtube: {\n label: \"YouTube\",\n environmentMapping: {\n YOUTUBE_TOKEN: \"$secrets.YOUTUBE_TOKEN\",\n },\n helpText:\n \"Connect your YouTube account to search videos, get channel info, and fetch comments via the Data API\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n helpText:\n \"1. Go to [Google Cloud Console](https://console.cloud.google.com/)\\n2. Enable **YouTube Data API v3**\\n3. Go to **Credentials** → **Create Credentials** → **API Key**\\n4. Copy the API key\",\n secrets: {\n YOUTUBE_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"AIzaSy...\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n zapier: {\n label: \"Zapier\",\n environmentMapping: {\n ZAPIER_TOKEN: \"$secrets.ZAPIER_TOKEN\",\n },\n helpText:\n \"Connect your Zapier account to trigger zaps and use AI Actions (NLA) to automate workflows\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n ZAPIER_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-zapier-api-key\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n zapsign: {\n label: \"ZapSign\",\n environmentMapping: {\n ZAPSIGN_TOKEN: \"$secrets.ZAPSIGN_TOKEN\",\n },\n helpText:\n \"Connect your ZapSign account to create documents for electronic signature and track signing status\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n ZAPSIGN_TOKEN: {\n label: \"API Token\",\n required: true,\n placeholder: \"your-zapsign-api-token\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n zendesk: {\n label: \"Zendesk\",\n environmentMapping: {\n ZENDESK_API_TOKEN: \"$secrets.ZENDESK_API_TOKEN\",\n ZENDESK_EMAIL: \"$vars.ZENDESK_EMAIL\",\n ZENDESK_SUBDOMAIN: \"$vars.ZENDESK_SUBDOMAIN\",\n },\n helpText:\n \"Connect your Zendesk account to manage support tickets, users, organizations, and automate customer support workflows\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [Zendesk Admin Center](https://www.zendesk.com/admin/)\\n2. Go to **Apps and integrations → APIs → Zendesk API**\\n3. Enable **Token Access** under the Settings tab\\n4. Click **Add API token** and copy the token\",\n secrets: {\n ZENDESK_API_TOKEN: {\n label: \"API Token\",\n required: true,\n placeholder: \"your-zendesk-api-token\",\n },\n ZENDESK_EMAIL: {\n label: \"Email\",\n required: true,\n placeholder: \"your-email@company.com\",\n helpText: \"The email address associated with your Zendesk account\",\n type: \"variable\",\n },\n ZENDESK_SUBDOMAIN: {\n label: \"Subdomain\",\n required: true,\n placeholder: \"yourcompany\",\n helpText:\n \"Your Zendesk subdomain (e.g. 'yourcompany' from yourcompany.zendesk.com)\",\n type: \"variable\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n htmlcsstoimage: {\n label: \"HTML/CSS to Image\",\n environmentMapping: {\n HCTI_API_KEY: \"$secrets.HCTI_API_KEY\",\n HCTI_USER_ID: \"$vars.HCTI_USER_ID\",\n },\n helpText:\n \"Connect your HTML/CSS to Image account to generate images from HTML and CSS\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n HCTI_API_KEY: {\n label: \"API Key\",\n required: true,\n },\n HCTI_USER_ID: {\n label: \"User ID\",\n required: true,\n type: \"variable\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n imgur: {\n label: \"Imgur\",\n environmentMapping: {\n IMGUR_CLIENT_ID: \"$secrets.IMGUR_CLIENT_ID\",\n },\n helpText: \"Connect your Imgur account to upload, manage, and share images\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n IMGUR_CLIENT_ID: {\n label: \"Client ID\",\n required: true,\n placeholder: \"your-imgur-client-id\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n instagram: {\n label: \"Instagram\",\n environmentMapping: {\n INSTAGRAM_TOKEN: \"$secrets.INSTAGRAM_TOKEN\",\n INSTAGRAM_BUSINESS_ACCOUNT_ID: \"$vars.INSTAGRAM_BUSINESS_ACCOUNT_ID\",\n },\n helpText:\n \"Connect your Instagram Business account to manage posts, stories, and insights\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n secrets: {\n INSTAGRAM_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n INSTAGRAM_BUSINESS_ACCOUNT_ID: {\n label: \"Business Account ID\",\n required: true,\n type: \"variable\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n \"prisma-postgres\": {\n label: \"Prisma Postgres\",\n environmentMapping: {\n PRISMA_POSTGRES_TOKEN: \"$secrets.PRISMA_POSTGRES_TOKEN\",\n },\n helpText:\n \"Connect your Prisma Postgres database to manage schemas, run queries, and access data through Prisma's serverless database platform\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n PRISMA_POSTGRES_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"eyJhbGci...\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n discord: {\n label: \"Discord\",\n environmentMapping: {\n DISCORD_BOT_TOKEN: \"$secrets.DISCORD_BOT_TOKEN\",\n },\n helpText:\n \"Connect your Discord bot to manage servers, channels, messages, and automate interactions\",\n authMethods: {\n \"api-token\": {\n label: \"Bot Token\",\n secrets: {\n DISCORD_BOT_TOKEN: {\n label: \"Bot Token\",\n required: true,\n placeholder: \"your-discord-bot-token\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n lark: {\n label: \"Lark\",\n environmentMapping: {\n LARK_TOKEN: \"$secrets.LARK_TOKEN\",\n LARK_APP_ID: \"$vars.LARK_APP_ID\",\n },\n helpText:\n \"Connect your Lark (Feishu) app to manage messages, documents, calendars, and workflows\",\n authMethods: {\n \"api-token\": {\n label: \"App Credentials\",\n secrets: {\n LARK_TOKEN: {\n label: \"App Secret\",\n required: true,\n type: \"secret\",\n },\n LARK_APP_ID: {\n label: \"App ID\",\n required: true,\n type: \"variable\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n mailsac: {\n label: \"Mailsac\",\n environmentMapping: {\n MAILSAC_TOKEN: \"$secrets.MAILSAC_TOKEN\",\n },\n helpText:\n \"Connect your Mailsac account to manage disposable email inboxes for testing\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n MAILSAC_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-mailsac-api-key\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n minio: {\n label: \"MinIO\",\n environmentMapping: {\n MINIO_TOKEN: \"$secrets.MINIO_TOKEN\",\n MINIO_SECRET_TOKEN: \"$secrets.MINIO_SECRET_TOKEN\",\n MINIO_ENDPOINT: \"$vars.MINIO_ENDPOINT\",\n },\n helpText:\n \"Connect your MinIO instance to manage S3-compatible object storage buckets and objects\",\n authMethods: {\n \"api-token\": {\n label: \"Access Credentials\",\n secrets: {\n MINIO_TOKEN: {\n label: \"Access Key\",\n required: true,\n type: \"secret\",\n },\n MINIO_SECRET_TOKEN: {\n label: \"Secret Key\",\n required: true,\n type: \"secret\",\n },\n MINIO_ENDPOINT: {\n label: \"Endpoint URL\",\n required: true,\n placeholder: \"https://minio.example.com\",\n type: \"variable\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n pdforge: {\n label: \"PDForge\",\n environmentMapping: {\n PDFORGE_API_KEY: \"$secrets.PDFORGE_API_KEY\",\n },\n helpText:\n \"Connect your PDForge account to generate PDF documents from templates\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n PDFORGE_API_KEY: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-pdforge-api-key\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n \"discord-webhook\": {\n label: \"Discord Webhook\",\n environmentMapping: {\n DISCORD_WEBHOOK_URL: \"$secrets.DISCORD_WEBHOOK_URL\",\n },\n helpText: \"Connect a Discord webhook to send messages to channels\",\n authMethods: {\n \"api-token\": {\n label: \"Webhook URL\",\n secrets: {\n DISCORD_WEBHOOK_URL: {\n label: \"Webhook URL\",\n required: true,\n placeholder: \"https://discord.com/api/webhooks/xxx/xxx\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n spotify: {\n label: \"Spotify\",\n environmentMapping: {\n SPOTIFY_TOKEN: \"$secrets.SPOTIFY_ACCESS_TOKEN\",\n },\n featureFlag: FeatureSwitchKey.SpotifyConnector,\n helpText:\n \"Connect your Spotify account to manage playlists, control playback, and access music data\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\n helpText: \"Sign in with Spotify to grant access.\",\n secrets: {\n SPOTIFY_ACCESS_TOKEN: {\n label: \"Access Token\",\n required: true,\n },\n SPOTIFY_REFRESH_TOKEN: {\n label: \"Refresh Token\",\n required: true,\n },\n },\n },\n },\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://accounts.spotify.com/authorize\",\n tokenUrl: \"https://accounts.spotify.com/api/token\",\n scopes: [\n \"ugc-image-upload\",\n \"user-read-playback-state\",\n \"user-modify-playback-state\",\n \"user-read-currently-playing\",\n \"app-remote-control\",\n \"streaming\",\n \"playlist-read-private\",\n \"playlist-read-collaborative\",\n \"playlist-modify-private\",\n \"playlist-modify-public\",\n \"user-follow-modify\",\n \"user-follow-read\",\n \"user-read-playback-position\",\n \"user-top-read\",\n \"user-read-recently-played\",\n \"user-library-modify\",\n \"user-library-read\",\n \"user-read-email\",\n \"user-read-private\",\n ],\n },\n },\n \"slack-webhook\": {\n label: \"Slack Webhook\",\n environmentMapping: {\n SLACK_WEBHOOK_URL: \"$secrets.SLACK_WEBHOOK_URL\",\n },\n helpText: \"Connect a Slack incoming webhook to send messages to channels\",\n authMethods: {\n \"api-token\": {\n label: \"Webhook URL\",\n secrets: {\n SLACK_WEBHOOK_URL: {\n label: \"Webhook URL\",\n required: true,\n placeholder: \"https://hooks.slack.com/services/xxx/xxx/xxx\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n gitlab: {\n label: \"GitLab\",\n environmentMapping: {\n GITLAB_TOKEN: \"$secrets.GITLAB_TOKEN\",\n GITLAB_HOST: \"$vars.GITLAB_HOST\",\n },\n helpText:\n \"Connect your GitLab account to manage repositories, issues, merge requests, and CI/CD pipelines\",\n authMethods: {\n \"api-token\": {\n label: \"Personal Access Token\",\n secrets: {\n GITLAB_TOKEN: {\n label: \"Personal Access Token\",\n required: true,\n },\n GITLAB_HOST: {\n label: \"GitLab Host\",\n required: false,\n placeholder: \"gitlab.com\",\n type: \"variable\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n wix: {\n label: \"Wix\",\n environmentMapping: {\n WIX_TOKEN: \"$secrets.WIX_TOKEN\",\n },\n helpText:\n \"Connect your Wix account to manage sites, collections, and content\",\n authMethods: {\n \"api-token\": {\n label: \"API Key\",\n secrets: {\n WIX_TOKEN: {\n label: \"API Key\",\n required: true,\n placeholder: \"your-wix-api-key\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n v0: {\n label: \"v0\",\n environmentMapping: {\n V0_TOKEN: \"$secrets.V0_TOKEN\",\n },\n helpText:\n \"Connect your v0 account to generate UI components, chat completions, and iterate on React and Next.js code with the v0 Platform API\",\n authMethods: {\n \"api-token\": {\n label: \"API Token\",\n helpText:\n \"1. Log in to [v0](https://v0.dev)\\n2. Go to **Settings** → **Keys** ([direct link](https://v0.dev/chat/settings/keys))\\n3. Create a new API key\\n4. Copy the generated token\",\n secrets: {\n V0_TOKEN: {\n label: \"API Token\",\n required: true,\n placeholder: \"v0-...\",\n },\n },\n },\n },\n defaultAuthMethod: \"api-token\",\n },\n} satisfies Record<string, ConnectorConfig>;\n\nexport type ConnectorType = keyof typeof CONNECTOR_TYPES_DEF;\n\nexport const CONNECTOR_TYPES: Record<ConnectorType, ConnectorConfig> =\n CONNECTOR_TYPES_DEF;\nexport const connectorTypeSchema = z.enum(\n Object.keys(CONNECTOR_TYPES_DEF) as [ConnectorType, ...ConnectorType[]],\n);\n\n/**\n * Get auth methods for a connector type\n */\nexport function getConnectorAuthMethods(\n type: ConnectorType,\n): Partial<Record<ConnectorAuthMethodType, ConnectorAuthMethodConfig>> {\n return CONNECTOR_TYPES[type].authMethods;\n}\n\n/**\n * Get default auth method for a connector type\n */\nexport function getConnectorDefaultAuthMethod(\n type: ConnectorType,\n): ConnectorAuthMethodType | undefined {\n return CONNECTOR_TYPES[type].defaultAuthMethod;\n}\n\n/**\n * Get secrets config for a specific auth method\n */\nexport function getConnectorSecretsForAuthMethod(\n type: ConnectorType,\n authMethod: ConnectorAuthMethodType,\n): Record<string, ConnectorSecretConfig> | undefined {\n const authMethods = getConnectorAuthMethods(type);\n return authMethods[authMethod]?.secrets;\n}\n\n/**\n * Get secret names for a specific auth method\n */\nexport function getConnectorSecretNames(\n type: ConnectorType,\n authMethod: ConnectorAuthMethodType,\n): string[] {\n const secrets = getConnectorSecretsForAuthMethod(type, authMethod);\n return secrets ? Object.keys(secrets) : [];\n}\n\n/**\n * Get environment mapping for a connector type.\n */\nexport function getConnectorEnvironmentMapping(\n type: ConnectorType,\n): Record<string, string> {\n return CONNECTOR_TYPES[type].environmentMapping;\n}\n\n/**\n * Get connector label and derived env var names for a connector secret.\n * Performs a reverse lookup from secret name to the connector type and\n * environment mapping that references it.\n *\n * Example: getConnectorDerivedNames(\"GITHUB_ACCESS_TOKEN\")\n * → { connectorLabel: \"GitHub\", envVarNames: [\"GH_TOKEN\", \"GITHUB_TOKEN\"] }\n */\nexport function getConnectorDerivedNames(\n secretName: string,\n): { connectorLabel: string; envVarNames: string[] } | null {\n const allTypes = Object.keys(CONNECTOR_TYPES) as ConnectorType[];\n\n for (const type of allTypes) {\n const config = CONNECTOR_TYPES[type];\n\n // Check if this secret belongs to any auth method of this connector\n const authMethods = config.authMethods as Record<\n string,\n ConnectorAuthMethodConfig\n >;\n let found = false;\n for (const method of Object.values(authMethods)) {\n if (method.secrets && secretName in method.secrets) {\n found = true;\n break;\n }\n }\n\n if (!found) {\n continue;\n }\n\n // Find all env var names that reference this secret\n const mapping = getConnectorEnvironmentMapping(type);\n const envVarNames = Object.entries(mapping)\n .filter(([, valueRef]) => {\n return valueRef === `$secrets.${secretName}`;\n })\n .map(([envVar]) => {\n return envVar;\n });\n\n if (envVarNames.length > 0) {\n return { connectorLabel: config.label, envVarNames };\n }\n }\n\n return null;\n}\n\n/**\n * Get the set of environment variable names that connected connectors can provide.\n * Used by pre-run checks to exclude connector-provided secrets from \"missing\" lists.\n *\n * Example: getConnectorProvidedSecretNames([\"github\"])\n * → Set { \"GH_TOKEN\", \"GITHUB_TOKEN\" }\n */\nexport function getConnectorProvidedSecretNames(\n connectedTypes: string[],\n): Set<string> {\n const provided = new Set<string>();\n\n for (const rawType of connectedTypes) {\n const parsed = connectorTypeSchema.safeParse(rawType);\n if (!parsed.success) {\n continue;\n }\n const mapping = getConnectorEnvironmentMapping(parsed.data);\n for (const envVar of Object.keys(mapping)) {\n provided.add(envVar);\n }\n }\n\n return provided;\n}\n\n/**\n * Get OAuth configuration for a connector type\n */\nexport function getConnectorOAuthConfig(\n type: ConnectorType,\n): ConnectorOAuthConfig | undefined {\n const config = CONNECTOR_TYPES[type];\n return \"oauth\" in config ? config.oauth : undefined;\n}\n\n/**\n * Check if stored OAuth scopes cover all required scopes for a connector type.\n * Returns true if no OAuth config exists (non-OAuth connector) or all required scopes are present.\n * Returns false if storedScopes is null (legacy connector) or missing any required scope.\n */\nexport function hasRequiredScopes(\n connectorType: ConnectorType,\n storedScopes: string[] | null,\n): boolean {\n const oauthConfig = getConnectorOAuthConfig(connectorType);\n if (!oauthConfig) return true;\n if (oauthConfig.scopes.length === 0) return true;\n if (!storedScopes) return false;\n const storedSet = new Set(storedScopes);\n return oauthConfig.scopes.every((s) => {\n return storedSet.has(s);\n });\n}\n\n/**\n * Compute the diff between currently required scopes and stored scopes for a connector.\n */\nexport interface ScopeDiff {\n addedScopes: string[];\n removedScopes: string[];\n currentScopes: string[];\n storedScopes: string[];\n}\n\nexport function getScopeDiff(\n connectorType: ConnectorType,\n storedScopes: string[] | null,\n): ScopeDiff {\n const oauthConfig = getConnectorOAuthConfig(connectorType);\n const currentScopes = oauthConfig?.scopes ?? [];\n const stored = storedScopes ?? [];\n const storedSet = new Set(stored);\n const currentSet = new Set(currentScopes);\n\n return {\n addedScopes: currentScopes.filter((s) => {\n return !storedSet.has(s);\n }),\n removedScopes: stored.filter((s) => {\n return !currentSet.has(s);\n }),\n currentScopes,\n storedScopes: stored,\n };\n}\n\n/**\n * Get all secret/variable names managed by connectors across ALL auth methods.\n * Unlike `getConnectorProvidedSecretNames` (which only reads environmentMapping),\n * this function also includes api-token auth method secrets.\n *\n * Used to hide connector-managed secrets from the secrets & variables list.\n */\nexport function getConnectorManagedSecretNames(\n types: ConnectorType[],\n): Set<string> {\n const managed = new Set<string>();\n for (const type of types) {\n const config = CONNECTOR_TYPES[type];\n for (const method of Object.values(config.authMethods)) {\n for (const name of Object.keys(method.secrets)) {\n managed.add(name);\n }\n }\n // Also include environmentMapping keys (OAuth-derived env vars like GH_TOKEN)\n const mapping = getConnectorEnvironmentMapping(type);\n for (const envVar of Object.keys(mapping)) {\n managed.add(envVar);\n }\n }\n return managed;\n}\n\n/**\n * Reverse lookup: given a secret/env-var name, find which connector type manages it.\n * Checks both authMethods.secrets keys and environmentMapping keys.\n * Returns null if no connector manages this name.\n */\nexport function getConnectorTypeForSecretName(\n name: string,\n): ConnectorType | null {\n const allTypes = Object.keys(CONNECTOR_TYPES) as ConnectorType[];\n for (const type of allTypes) {\n const config = CONNECTOR_TYPES[type];\n // Check authMethods secrets\n for (const method of Object.values(config.authMethods)) {\n if (name in method.secrets) {\n return type;\n }\n }\n // Check environmentMapping keys\n const mapping = getConnectorEnvironmentMapping(type);\n if (name in mapping) {\n return type;\n }\n }\n return null;\n}\n\n/**\n * Get required secret names for a connector's api-token auth method.\n * Returns null if the connector type does not support api-token auth.\n * Note: Returns ALL required field names regardless of storage type (secret or variable).\n */\nexport function getApiTokenRequiredSecretNames(\n type: ConnectorType,\n): string[] | null {\n const config = CONNECTOR_TYPES[type];\n const apiTokenConfig = config.authMethods[\"api-token\"] as\n | ConnectorAuthMethodConfig\n | undefined;\n if (!apiTokenConfig) return null;\n\n return Object.entries(apiTokenConfig.secrets)\n .filter(([, cfg]) => {\n return cfg.required;\n })\n .map(([name]) => {\n return name;\n });\n}\n\n/**\n * Get required field names grouped by storage type for a connector's api-token auth method.\n * Returns null if the connector type does not support api-token auth.\n */\nexport function getApiTokenFieldsByType(\n type: ConnectorType,\n): { secrets: string[]; variables: string[] } | null {\n const config = CONNECTOR_TYPES[type];\n const apiTokenConfig = config.authMethods[\"api-token\"] as\n | ConnectorAuthMethodConfig\n | undefined;\n if (!apiTokenConfig) return null;\n\n const secretNames: string[] = [];\n const variableNames: string[] = [];\n for (const [name, cfg] of Object.entries(apiTokenConfig.secrets)) {\n if (!cfg.required) continue;\n if (cfg.type === \"variable\") {\n variableNames.push(name);\n } else {\n secretNames.push(name);\n }\n }\n return { secrets: secretNames, variables: variableNames };\n}\n\n/**\n * Derive which connector types are \"connected\" via api-token based on present user secret and variable names.\n * A connector type is considered connected if all its required api-token fields exist\n * (secrets checked against userSecretNames, variables checked against userVariableNames).\n */\nexport function deriveApiTokenConnectedTypes(\n userSecretNames: Set<string>,\n userVariableNames?: Set<string>,\n): ConnectorType[] {\n const allTypes = Object.keys(CONNECTOR_TYPES) as ConnectorType[];\n const connected: ConnectorType[] = [];\n const varNames = userVariableNames ?? new Set<string>();\n\n for (const type of allTypes) {\n const fields = getApiTokenFieldsByType(type);\n if (!fields) continue;\n if (fields.secrets.length === 0 && fields.variables.length === 0) continue;\n const secretsOk = fields.secrets.every((name) => {\n return userSecretNames.has(name);\n });\n const variablesOk = fields.variables.every((name) => {\n return varNames.has(name);\n });\n if (secretsOk && variablesOk) {\n connected.push(type);\n }\n }\n\n return connected;\n}\n\n/**\n * Connector response schema\n */\nexport const connectorResponseSchema = z.object({\n id: z.uuid().nullable(),\n type: connectorTypeSchema,\n authMethod: z.string(),\n externalId: z.string().nullable(),\n externalUsername: z.string().nullable(),\n externalEmail: z.string().nullable(),\n oauthScopes: z.array(z.string()).nullable(),\n needsReconnect: z.boolean(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport type ConnectorResponse = z.infer<typeof connectorResponseSchema>;\n\n/**\n * List connectors response\n */\nexport const connectorListResponseSchema = z.object({\n connectors: z.array(connectorResponseSchema),\n configuredTypes: z.array(connectorTypeSchema),\n connectorProvidedSecretNames: z.array(z.string()),\n});\n\nexport type ConnectorListResponse = z.infer<typeof connectorListResponseSchema>;\n\n/**\n * Scope diff response schema\n */\nexport const scopeDiffResponseSchema = z.object({\n addedScopes: z.array(z.string()),\n removedScopes: z.array(z.string()),\n currentScopes: z.array(z.string()),\n storedScopes: z.array(z.string()),\n});\n\nexport type ScopeDiffResponse = z.infer<typeof scopeDiffResponseSchema>;\n\n/**\n * Connector session status enum\n */\nexport const connectorSessionStatusSchema = z.enum([\n \"pending\",\n \"complete\",\n \"expired\",\n \"error\",\n]);\n\nexport type ConnectorSessionStatus = z.infer<\n typeof connectorSessionStatusSchema\n>;\n\n/**\n * Connector session response schema\n */\nexport const connectorSessionResponseSchema = z.object({\n id: z.uuid(),\n code: z.string(),\n type: connectorTypeSchema,\n status: connectorSessionStatusSchema,\n verificationUrl: z.string(),\n expiresIn: z.number(),\n interval: z.number(),\n errorMessage: z.string().nullable().optional(),\n});\n\nexport type ConnectorSessionResponse = z.infer<\n typeof connectorSessionResponseSchema\n>;\n\n/**\n * Connector session status response (for polling)\n */\nexport const connectorSessionStatusResponseSchema = z.object({\n status: connectorSessionStatusSchema,\n errorMessage: z.string().nullable().optional(),\n});\n\nexport type ConnectorSessionStatusResponse = z.infer<\n typeof connectorSessionStatusResponseSchema\n>;\n\n/**\n * Computer connector create response\n */\nexport const computerConnectorCreateResponseSchema = z.object({\n id: z.uuid(),\n ngrokToken: z.string(),\n bridgeToken: z.string(),\n endpointPrefix: z.string(),\n domain: z.string(),\n});\n\nexport type ComputerConnectorCreateResponse = z.infer<\n typeof computerConnectorCreateResponseSchema\n>;\n","/**\n * Firewall config loader.\n *\n * Checks builtin (generated) configs first, then falls back to fetching\n * firewall YAML files from GitHub repositories.\n */\n\nimport { parse as parseYaml } from \"yaml\";\nimport { resolveFirewallRef, parseGitHubTreeUrl } from \"./github-url\";\nimport {\n firewallConfigSchema,\n type FirewallConfig,\n} from \"./contracts/firewalls\";\nimport { getConnectorFirewall, isFirewallConnectorType } from \"./firewalls\";\n\n/** Minimal fetch function signature for dependency injection in tests */\nexport type FetchFn = (url: string) => Promise<Response>;\n\n/** Max response size for firewall YAML files (128KB) */\nconst MAX_RESPONSE_SIZE = 128 * 1024;\n\n/**\n * Build the raw GitHub URL for a firewall's YAML config file.\n *\n * @param ref - Bare firewall name or full GitHub URL\n * @returns Raw GitHub URL pointing to firewall.yaml\n */\nexport function buildFirewallYamlUrl(ref: string): string {\n const url = resolveFirewallRef(ref);\n const parsed = parseGitHubTreeUrl(url);\n if (!parsed) {\n throw new Error(`Invalid firewall URL after resolution: ${url}`);\n }\n const pathPrefix = parsed.path ? `${parsed.path}/` : \"\";\n return `https://raw.githubusercontent.com/${parsed.owner}/${parsed.repo}/${parsed.branch}/${pathPrefix}firewall.yaml`;\n}\n\n/**\n * Fetch and parse a firewall config.\n *\n * For builtin firewalls (e.g. \"github\"), returns the bundled config directly\n * without any network request. For custom firewalls, fetches from GitHub.\n *\n * @param ref - Bare firewall name (e.g. \"github\") or full GitHub URL\n * @param fetchFn - Optional fetch function (defaults to global fetch, injectable for tests)\n * @returns Validated FirewallConfig\n * @throws Error if fetch fails, YAML is invalid, or schema validation fails\n */\nexport async function fetchFirewallConfig(\n ref: string,\n fetchFn: FetchFn = fetch,\n): Promise<FirewallConfig> {\n // Check builtin configs first (bare name only, not full URLs)\n const trimmed = ref.trim();\n const builtin =\n !trimmed.includes(\"/\") && isFirewallConnectorType(trimmed)\n ? getConnectorFirewall(trimmed)\n : undefined;\n if (builtin) {\n return builtin;\n }\n\n const rawUrl = buildFirewallYamlUrl(ref);\n\n const res = await fetchFn(rawUrl);\n if (!res.ok) {\n throw new Error(\n `Failed to fetch firewall config for \"${ref}\" from ${rawUrl}: ${res.status} ${res.statusText}`,\n );\n }\n\n const contentLength = res.headers.get(\"content-length\");\n if (contentLength && parseInt(contentLength, 10) > MAX_RESPONSE_SIZE) {\n throw new Error(\n `Firewall config \"${ref}\" exceeds maximum size (${MAX_RESPONSE_SIZE} bytes)`,\n );\n }\n\n const content = await res.text();\n if (content.length > MAX_RESPONSE_SIZE) {\n throw new Error(\n `Firewall config \"${ref}\" exceeds maximum size (${MAX_RESPONSE_SIZE} bytes)`,\n );\n }\n\n let yamlData: unknown;\n try {\n yamlData = parseYaml(content);\n } catch (e) {\n throw new Error(\n `Invalid YAML in firewall config \"${ref}\": ${e instanceof Error ? e.message : String(e)}`,\n );\n }\n\n const result = firewallConfigSchema.safeParse(yamlData);\n if (!result.success) {\n const issues = result.error.issues\n .map((i) => {\n return `${i.path.join(\".\")}: ${i.message}`;\n })\n .join(\"; \");\n throw new Error(`Invalid firewall config \"${ref}\": ${issues}`);\n }\n\n return result.data;\n}\n","// Auto-generated from Slack API method-to-scope mappings.\n// Source: slack-ruby/slack-api-ref (auto-synced daily from docs.slack.dev)\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:slack\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\nimport type { PermissionNamesOf } from \"./index\";\n\nexport const slackFirewall = {\n name: \"slack\",\n description: \"Slack API\",\n placeholders: {\n SLACK_TOKEN: \"xoxb-100100100100-1001001001001-CoffeeSafeLocalCoffeeSaf\",\n },\n apis: [\n {\n base: \"https://slack.com/api\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.SLACK_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"admin\",\n rules: [\n \"POST /admin.audit.anomaly.allow.getItem\",\n \"POST /admin.audit.anomaly.allow.updateItem\",\n \"GET /team.accessLogs\",\n \"GET /team.billableInfo\",\n \"GET /team.integrationLogs\",\n ],\n },\n {\n name: \"admin.analytics:read\",\n rules: [\n \"GET /admin.analytics.getFile\",\n \"GET /admin.analytics.messages.activity\",\n \"GET /admin.analytics.messages.metadata\",\n ],\n },\n {\n name: \"admin.app_activities:read\",\n rules: [\"POST /admin.apps.activities.list\"],\n },\n {\n name: \"admin.apps:read\",\n rules: [\n \"GET /admin.apps.approved.list\",\n \"POST /admin.apps.config.lookup\",\n \"GET /admin.apps.requests.list\",\n \"GET /admin.apps.restricted.list\",\n ],\n },\n {\n name: \"admin.apps:write\",\n rules: [\n \"POST /admin.apps.approve\",\n \"POST /admin.apps.clearResolution\",\n \"POST /admin.apps.config.set\",\n \"POST /admin.apps.requests.cancel\",\n \"POST /admin.apps.restrict\",\n \"POST /admin.apps.uninstall\",\n ],\n },\n {\n name: \"admin.barriers:read\",\n rules: [\"GET /admin.barriers.list\"],\n },\n {\n name: \"admin.barriers:write\",\n rules: [\n \"POST /admin.barriers.create\",\n \"POST /admin.barriers.delete\",\n \"POST /admin.barriers.update\",\n ],\n },\n {\n name: \"admin.conversations:manage_objects\",\n rules: [\n \"POST /admin.conversations.createForObjects\",\n \"POST /admin.conversations.linkObjects\",\n \"POST /admin.conversations.unlinkObjects\",\n ],\n },\n {\n name: \"admin.conversations:read\",\n rules: [\n \"POST /admin.conversations.ekm.listOriginalConnectedChannelInfo\",\n \"POST /admin.conversations.getConversationPrefs\",\n \"POST /admin.conversations.getCustomRetention\",\n \"POST /admin.conversations.getTeams\",\n \"POST /admin.conversations.lookup\",\n \"GET /admin.conversations.restrictAccess.listGroups\",\n \"POST /admin.conversations.search\",\n ],\n },\n {\n name: \"admin.conversations:write\",\n rules: [\n \"POST /admin.conversations.archive\",\n \"POST /admin.conversations.bulkArchive\",\n \"POST /admin.conversations.bulkDelete\",\n \"POST /admin.conversations.bulkMove\",\n \"GET /admin.conversations.bulkSetExcludeFromSlackAi\",\n \"POST /admin.conversations.convertToPrivate\",\n \"POST /admin.conversations.convertToPublic\",\n \"POST /admin.conversations.create\",\n \"POST /admin.conversations.delete\",\n \"POST /admin.conversations.disconnectShared\",\n \"POST /admin.conversations.invite\",\n \"POST /admin.conversations.removeCustomRetention\",\n \"POST /admin.conversations.rename\",\n \"GET /admin.conversations.restrictAccess.addGroup\",\n \"GET /admin.conversations.restrictAccess.removeGroup\",\n \"POST /admin.conversations.setConversationPrefs\",\n \"POST /admin.conversations.setCustomRetention\",\n \"POST /admin.conversations.setTeams\",\n \"POST /admin.conversations.unarchive\",\n ],\n },\n {\n name: \"admin.invites:read\",\n rules: [\n \"POST /admin.inviteRequests.approved.list\",\n \"POST /admin.inviteRequests.denied.list\",\n \"POST /admin.inviteRequests.list\",\n ],\n },\n {\n name: \"admin.invites:write\",\n rules: [\n \"POST /admin.inviteRequests.approve\",\n \"POST /admin.inviteRequests.deny\",\n ],\n },\n {\n name: \"admin.roles:read\",\n rules: [\"GET /admin.roles.listAssignments\"],\n },\n {\n name: \"admin.roles:write\",\n rules: [\n \"POST /admin.roles.addAssignments\",\n \"POST /admin.roles.removeAssignments\",\n ],\n },\n {\n name: \"admin.teams:read\",\n rules: [\n \"GET /admin.emoji.list\",\n \"GET /admin.teams.admins.list\",\n \"POST /admin.teams.list\",\n \"GET /admin.teams.owners.list\",\n \"POST /admin.teams.settings.info\",\n ],\n },\n {\n name: \"admin.teams:write\",\n rules: [\n \"GET /admin.emoji.add\",\n \"GET /admin.emoji.addAlias\",\n \"GET /admin.emoji.remove\",\n \"GET /admin.emoji.rename\",\n \"POST /admin.teams.create\",\n \"GET /admin.teams.settings.setDefaultChannels\",\n \"POST /admin.teams.settings.setDescription\",\n \"POST /admin.teams.settings.setDiscoverability\",\n \"GET /admin.teams.settings.setIcon\",\n \"POST /admin.teams.settings.setName\",\n \"POST /admin.usergroups.addTeams\",\n ],\n },\n {\n name: \"admin.usergroups:read\",\n rules: [\"POST /admin.usergroups.listChannels\"],\n },\n {\n name: \"admin.usergroups:write\",\n rules: [\n \"POST /admin.usergroups.addChannels\",\n \"POST /admin.usergroups.removeChannels\",\n ],\n },\n {\n name: \"admin.users:read\",\n rules: [\n \"POST /admin.auth.policy.getEntities\",\n \"GET /admin.users.getExpiration\",\n \"POST /admin.users.list\",\n \"POST /admin.users.session.getSettings\",\n \"POST /admin.users.session.list\",\n \"POST /admin.users.unsupportedVersions.export\",\n ],\n },\n {\n name: \"admin.users:write\",\n rules: [\n \"POST /admin.auth.policy.assignEntities\",\n \"POST /admin.auth.policy.removeEntities\",\n \"POST /admin.users.assign\",\n \"POST /admin.users.invite\",\n \"POST /admin.users.remove\",\n \"POST /admin.users.session.clearSettings\",\n \"POST /admin.users.session.invalidate\",\n \"POST /admin.users.session.reset\",\n \"POST /admin.users.session.resetBulk\",\n \"POST /admin.users.session.setSettings\",\n \"POST /admin.users.setAdmin\",\n \"POST /admin.users.setExpiration\",\n \"POST /admin.users.setOwner\",\n \"POST /admin.users.setRegular\",\n ],\n },\n {\n name: \"admin.workflows:read\",\n rules: [\n \"POST /admin.functions.list\",\n \"POST /admin.functions.permissions.lookup\",\n \"POST /admin.functions.permissions.set\",\n \"POST /admin.workflows.permissions.lookup\",\n \"POST /admin.workflows.search\",\n ],\n },\n {\n name: \"admin.workflows:write\",\n rules: [\n \"POST /admin.workflows.collaborators.add\",\n \"POST /admin.workflows.collaborators.remove\",\n \"POST /admin.workflows.unpublish\",\n ],\n },\n {\n name: \"assistant:write\",\n rules: [\n \"POST /assistant.threads.setSuggestedPrompts\",\n \"POST /assistant.threads.setTitle\",\n ],\n },\n {\n name: \"bookmarks:read\",\n rules: [\"POST /bookmarks.list\", \"POST /workflows.featured.list\"],\n },\n {\n name: \"bookmarks:write\",\n rules: [\n \"POST /bookmarks.add\",\n \"POST /bookmarks.edit\",\n \"POST /bookmarks.remove\",\n \"POST /workflows.featured.add\",\n \"POST /workflows.featured.remove\",\n \"POST /workflows.featured.set\",\n ],\n },\n {\n name: \"calls:read\",\n rules: [\"POST /calls.info\"],\n },\n {\n name: \"calls:write\",\n rules: [\n \"POST /calls.add\",\n \"POST /calls.end\",\n \"POST /calls.participants.add\",\n \"POST /calls.participants.remove\",\n \"POST /calls.update\",\n ],\n },\n {\n name: \"canvases:read\",\n rules: [\"POST /canvases.sections.lookup\"],\n },\n {\n name: \"canvases:write\",\n rules: [\n \"POST /canvases.access.delete\",\n \"POST /canvases.access.set\",\n \"POST /canvases.create\",\n \"POST /canvases.delete\",\n \"POST /canvases.edit\",\n \"POST /conversations.canvases.create\",\n ],\n },\n {\n name: \"channels:history\",\n rules: [\"GET /conversations.history\", \"GET /conversations.replies\"],\n },\n {\n name: \"channels:join\",\n rules: [\"POST /conversations.join\"],\n },\n {\n name: \"channels:manage\",\n rules: [\n \"POST /conversations.archive\",\n \"POST /conversations.close\",\n \"POST /conversations.create\",\n \"POST /conversations.invite\",\n \"POST /conversations.kick\",\n \"POST /conversations.leave\",\n \"POST /conversations.mark\",\n \"POST /conversations.open\",\n \"POST /conversations.rename\",\n \"POST /conversations.setPurpose\",\n \"POST /conversations.setTopic\",\n \"POST /conversations.unarchive\",\n ],\n },\n {\n name: \"channels:read\",\n rules: [\n \"GET /conversations.info\",\n \"GET /conversations.list\",\n \"GET /conversations.members\",\n \"GET /users.conversations\",\n ],\n },\n {\n name: \"channels:write\",\n rules: [\n \"POST /conversations.archive\",\n \"POST /conversations.close\",\n \"POST /conversations.create\",\n \"POST /conversations.invite\",\n \"POST /conversations.join\",\n \"POST /conversations.kick\",\n \"POST /conversations.leave\",\n \"POST /conversations.mark\",\n \"POST /conversations.open\",\n \"POST /conversations.rename\",\n \"POST /conversations.setPurpose\",\n \"POST /conversations.setTopic\",\n \"POST /conversations.unarchive\",\n ],\n },\n {\n name: \"channels:write.invites\",\n rules: [\"POST /conversations.invite\"],\n },\n {\n name: \"channels:write.topic\",\n rules: [\n \"POST /conversations.setPurpose\",\n \"POST /conversations.setTopic\",\n ],\n },\n {\n name: \"chat:write\",\n rules: [\n \"POST /assistant.threads.setStatus\",\n \"POST /chat.appendStream\",\n \"POST /chat.delete\",\n \"POST /chat.deleteScheduledMessage\",\n \"POST /chat.meMessage\",\n \"POST /chat.postEphemeral\",\n \"POST /chat.postMessage\",\n \"POST /chat.scheduleMessage\",\n \"POST /chat.startStream\",\n \"POST /chat.stopStream\",\n \"POST /chat.update\",\n ],\n },\n {\n name: \"client\",\n rules: [\n \"POST /admin.workflows.triggers.types.permissions.lookup\",\n \"POST /admin.workflows.triggers.types.permissions.set\",\n ],\n },\n {\n name: \"conversations.connect:manage\",\n rules: [\n \"POST /conversations.approveSharedInvite\",\n \"GET /conversations.declineSharedInvite\",\n \"POST /conversations.externalInvitePermissions.set\",\n \"POST /conversations.listConnectInvites\",\n \"POST /conversations.requestSharedInvite.approve\",\n \"POST /conversations.requestSharedInvite.deny\",\n \"POST /conversations.requestSharedInvite.list\",\n \"POST /team.externalTeams.disconnect\",\n \"GET /team.externalTeams.list\",\n \"POST /users.discoverableContacts.lookup\",\n ],\n },\n {\n name: \"conversations.connect:write\",\n rules: [\n \"POST /conversations.acceptSharedInvite\",\n \"GET /conversations.inviteShared\",\n ],\n },\n {\n name: \"datastore:read\",\n rules: [\n \"POST /apps.datastore.bulkGet\",\n \"POST /apps.datastore.count\",\n \"POST /apps.datastore.get\",\n \"POST /apps.datastore.query\",\n ],\n },\n {\n name: \"datastore:write\",\n rules: [\n \"POST /apps.datastore.bulkDelete\",\n \"POST /apps.datastore.bulkPut\",\n \"POST /apps.datastore.delete\",\n \"POST /apps.datastore.put\",\n \"POST /apps.datastore.update\",\n ],\n },\n {\n name: \"dnd:read\",\n rules: [\"GET /dnd.info\", \"GET /dnd.teamInfo\"],\n },\n {\n name: \"dnd:write\",\n rules: [\n \"POST /dnd.endDnd\",\n \"POST /dnd.endSnooze\",\n \"GET /dnd.setSnooze\",\n ],\n },\n {\n name: \"emoji:read\",\n rules: [\"GET /emoji.list\"],\n },\n {\n name: \"files:read\",\n rules: [\"GET /files.info\", \"GET /files.list\"],\n },\n {\n name: \"files:write\",\n rules: [\n \"POST /files.comments.delete\",\n \"POST /files.completeUploadExternal\",\n \"POST /files.delete\",\n \"POST /files.getUploadURLExternal\",\n \"POST /files.revokePublicURL\",\n \"POST /files.sharedPublicURL\",\n \"POST /files.upload\",\n ],\n },\n {\n name: \"groups:history\",\n rules: [\"GET /conversations.history\", \"GET /conversations.replies\"],\n },\n {\n name: \"groups:read\",\n rules: [\n \"GET /conversations.info\",\n \"GET /conversations.list\",\n \"GET /conversations.members\",\n \"GET /users.conversations\",\n ],\n },\n {\n name: \"groups:write\",\n rules: [\n \"POST /conversations.archive\",\n \"POST /conversations.close\",\n \"POST /conversations.create\",\n \"POST /conversations.invite\",\n \"POST /conversations.kick\",\n \"POST /conversations.leave\",\n \"POST /conversations.mark\",\n \"POST /conversations.open\",\n \"POST /conversations.rename\",\n \"POST /conversations.setPurpose\",\n \"POST /conversations.setTopic\",\n \"POST /conversations.unarchive\",\n ],\n },\n {\n name: \"groups:write.invites\",\n rules: [\"POST /conversations.invite\"],\n },\n {\n name: \"groups:write.topic\",\n rules: [\n \"POST /conversations.setPurpose\",\n \"POST /conversations.setTopic\",\n ],\n },\n {\n name: \"hosting:read\",\n rules: [\"POST /apps.activities.list\"],\n },\n {\n name: \"identity:read\",\n rules: [\"GET /users.identity\"],\n },\n {\n name: \"im:history\",\n rules: [\"GET /conversations.history\", \"GET /conversations.replies\"],\n },\n {\n name: \"im:read\",\n rules: [\n \"GET /conversations.info\",\n \"GET /conversations.list\",\n \"GET /conversations.members\",\n \"GET /users.conversations\",\n ],\n },\n {\n name: \"im:write\",\n rules: [\n \"POST /conversations.archive\",\n \"POST /conversations.close\",\n \"POST /conversations.create\",\n \"POST /conversations.invite\",\n \"POST /conversations.kick\",\n \"POST /conversations.leave\",\n \"POST /conversations.mark\",\n \"POST /conversations.open\",\n \"POST /conversations.rename\",\n \"POST /conversations.setPurpose\",\n \"POST /conversations.setTopic\",\n \"POST /conversations.unarchive\",\n ],\n },\n {\n name: \"im:write.topic\",\n rules: [\n \"POST /conversations.setPurpose\",\n \"POST /conversations.setTopic\",\n ],\n },\n {\n name: \"links:write\",\n rules: [\"POST /chat.unfurl\"],\n },\n {\n name: \"lists:read\",\n rules: [\n \"POST /slackLists.download.get\",\n \"POST /slackLists.download.start\",\n \"POST /slackLists.items.info\",\n \"POST /slackLists.items.list\",\n ],\n },\n {\n name: \"lists:write\",\n rules: [\n \"POST /slackLists.access.delete\",\n \"POST /slackLists.access.set\",\n \"POST /slackLists.create\",\n \"POST /slackLists.items.create\",\n \"POST /slackLists.items.delete\",\n \"POST /slackLists.items.deleteMultiple\",\n \"POST /slackLists.items.update\",\n \"POST /slackLists.update\",\n ],\n },\n {\n name: \"mpim:history\",\n rules: [\"GET /conversations.history\", \"GET /conversations.replies\"],\n },\n {\n name: \"mpim:read\",\n rules: [\n \"GET /conversations.info\",\n \"GET /conversations.list\",\n \"GET /conversations.members\",\n \"GET /users.conversations\",\n ],\n },\n {\n name: \"mpim:write\",\n rules: [\n \"POST /conversations.archive\",\n \"POST /conversations.close\",\n \"POST /conversations.create\",\n \"POST /conversations.invite\",\n \"POST /conversations.kick\",\n \"POST /conversations.leave\",\n \"POST /conversations.mark\",\n \"POST /conversations.open\",\n \"POST /conversations.rename\",\n \"POST /conversations.setPurpose\",\n \"POST /conversations.setTopic\",\n \"POST /conversations.unarchive\",\n ],\n },\n {\n name: \"mpim:write.topic\",\n rules: [\n \"POST /conversations.setPurpose\",\n \"POST /conversations.setTopic\",\n ],\n },\n {\n name: \"openid\",\n rules: [\"POST /openid.connect.userInfo\"],\n },\n {\n name: \"pins:read\",\n rules: [\"GET /pins.list\"],\n },\n {\n name: \"pins:write\",\n rules: [\"POST /pins.add\", \"POST /pins.remove\"],\n },\n {\n name: \"reactions:read\",\n rules: [\"GET /reactions.get\", \"GET /reactions.list\"],\n },\n {\n name: \"reactions:write\",\n rules: [\"POST /reactions.add\", \"POST /reactions.remove\"],\n },\n {\n name: \"reminders:read\",\n rules: [\"GET /reminders.info\", \"GET /reminders.list\"],\n },\n {\n name: \"reminders:write\",\n rules: [\n \"POST /reminders.add\",\n \"POST /reminders.complete\",\n \"POST /reminders.delete\",\n ],\n },\n {\n name: \"remote_files:read\",\n rules: [\"GET /files.remote.info\", \"GET /files.remote.list\"],\n },\n {\n name: \"remote_files:share\",\n rules: [\"GET /files.remote.share\"],\n },\n {\n name: \"remote_files:write\",\n rules: [\n \"POST /files.remote.add\",\n \"POST /files.remote.remove\",\n \"POST /files.remote.update\",\n ],\n },\n {\n name: \"search:read\",\n rules: [\n \"POST /assistant.search.info\",\n \"GET /search.all\",\n \"GET /search.files\",\n \"GET /search.messages\",\n ],\n },\n {\n name: \"search:read.files\",\n rules: [\"POST /assistant.search.context\"],\n },\n {\n name: \"search:read.im\",\n rules: [\"POST /assistant.search.context\"],\n },\n {\n name: \"search:read.mpim\",\n rules: [\"POST /assistant.search.context\"],\n },\n {\n name: \"search:read.private\",\n rules: [\"POST /assistant.search.context\"],\n },\n {\n name: \"search:read.public\",\n rules: [\n \"POST /assistant.search.context\",\n \"POST /assistant.search.info\",\n ],\n },\n {\n name: \"search:read.users\",\n rules: [\"POST /assistant.search.context\"],\n },\n {\n name: \"stars:read\",\n rules: [\"GET /stars.list\"],\n },\n {\n name: \"stars:write\",\n rules: [\"POST /stars.add\", \"POST /stars.remove\"],\n },\n {\n name: \"team.billing:read\",\n rules: [\"POST /team.billing.info\"],\n },\n {\n name: \"team.preferences:read\",\n rules: [\"POST /team.preferences.list\"],\n },\n {\n name: \"team:read\",\n rules: [\n \"GET /team.externalTeams.list\",\n \"GET /team.info\",\n \"POST /users.discoverableContacts.lookup\",\n ],\n },\n {\n name: \"tokens.basic\",\n rules: [\"GET /migration.exchange\"],\n },\n {\n name: \"triggers:read\",\n rules: [\"POST /workflows.triggers.permissions.list\"],\n },\n {\n name: \"triggers:write\",\n rules: [\n \"POST /workflows.triggers.permissions.add\",\n \"POST /workflows.triggers.permissions.remove\",\n \"POST /workflows.triggers.permissions.set\",\n ],\n },\n {\n name: \"usergroups:read\",\n rules: [\"GET /usergroups.list\", \"GET /usergroups.users.list\"],\n },\n {\n name: \"usergroups:write\",\n rules: [\n \"POST /usergroups.create\",\n \"POST /usergroups.disable\",\n \"POST /usergroups.enable\",\n \"POST /usergroups.update\",\n \"POST /usergroups.users.update\",\n ],\n },\n {\n name: \"users.profile:read\",\n rules: [\"GET /team.profile.get\", \"GET /users.profile.get\"],\n },\n {\n name: \"users.profile:write\",\n rules: [\n \"GET /users.deletePhoto\",\n \"POST /users.profile.set\",\n \"POST /users.setPhoto\",\n ],\n },\n {\n name: \"users:read\",\n rules: [\n \"GET /bots.info\",\n \"GET /users.getPresence\",\n \"GET /users.info\",\n \"GET /users.list\",\n ],\n },\n {\n name: \"users:read.email\",\n rules: [\"GET /users.lookupByEmail\"],\n },\n {\n name: \"users:write\",\n rules: [\n \"POST /apps.user.connection.update\",\n \"POST /users.setActive\",\n \"POST /users.setPresence\",\n ],\n },\n {\n name: \"no_scopes_required\",\n description:\n \"Methods that require a valid token but no specific scope\",\n rules: [\n \"POST /api.test\",\n \"POST /apps.auth.external.delete\",\n \"POST /apps.auth.external.get\",\n \"POST /apps.connections.open\",\n \"POST /apps.event.authorizations.list\",\n \"POST /apps.manifest.create\",\n \"POST /apps.manifest.delete\",\n \"POST /apps.manifest.export\",\n \"POST /apps.manifest.update\",\n \"POST /apps.manifest.validate\",\n \"POST /apps.uninstall\",\n \"GET /auth.revoke\",\n \"POST /auth.teams.list\",\n \"POST /auth.test\",\n \"GET /chat.getPermalink\",\n \"POST /chat.scheduledMessages.list\",\n \"POST /dialog.open\",\n \"POST /functions.completeError\",\n \"POST /functions.completeSuccess\",\n \"POST /functions.distributions.permissions.add\",\n \"POST /functions.distributions.permissions.list\",\n \"POST /functions.distributions.permissions.remove\",\n \"POST /functions.distributions.permissions.set\",\n \"POST /functions.workflows.steps.list\",\n \"POST /functions.workflows.steps.responses.export\",\n \"POST /oauth.access\",\n \"POST /oauth.v2.access\",\n \"POST /oauth.v2.exchange\",\n \"POST /oauth.v2.user.access\",\n \"POST /openid.connect.token\",\n \"GET /rtm.connect\",\n \"GET /rtm.start\",\n \"POST /tooling.tokens.rotate\",\n \"POST /views.open\",\n \"POST /views.publish\",\n \"POST /views.push\",\n \"POST /views.update\",\n ],\n },\n ],\n },\n {\n base: \"https://files.slack.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.SLACK_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"files:read\",\n description: \"Download files from Slack\",\n rules: [\"GET /{path+}\"],\n },\n ],\n },\n ],\n} as const satisfies FirewallConfig;\n\nexport const slackDefaultAllowed: ReadonlyArray<\n PermissionNamesOf<typeof slackFirewall>\n> = [\n \"bookmarks:read\",\n \"channels:history\",\n \"channels:read\",\n \"emoji:read\",\n \"pins:read\",\n \"reactions:read\",\n \"search:read\",\n \"team:read\",\n \"usergroups:read\",\n \"users.profile:read\",\n \"users:read\",\n];\n","// Auto-generated from AgentMail API docs.\n// Source: https://docs.agentmail.to/api-reference\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:agentmail\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const agentmailFirewall: FirewallConfig = {\n name: \"agentmail\",\n description: \"AgentMail API\",\n placeholders: {\n AGENTMAIL_TOKEN: \"am_c0ffee5afe10ca1c0ffee5afe10ca1c0\",\n },\n apis: [\n {\n base: \"https://api.agentmail.to\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.AGENTMAIL_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Ahrefs API docs.\n// Source: https://docs.ahrefs.com/docs/api/reference/introduction\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:ahrefs\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const ahrefsFirewall: FirewallConfig = {\n name: \"ahrefs\",\n description: \"Ahrefs API\",\n placeholders: {\n AHREFS_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafe00\",\n },\n apis: [\n {\n base: \"https://api.ahrefs.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.AHREFS_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Airtable API docs.\n// Source: https://airtable.com/developers/web/api/authentication\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:airtable\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const airtableFirewall: FirewallConfig = {\n name: \"airtable\",\n description: \"Airtable API\",\n placeholders: {\n AIRTABLE_TOKEN:\n \"patCoffeeSafeL0.c0ffee5afe10ca1c0ffee5afe10ca1c0ffee5afe10ca1c0ffee5afe10ca1c0ff\",\n },\n apis: [\n {\n base: \"https://api.airtable.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.AIRTABLE_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Apify API docs.\n// Source: https://docs.apify.com/api/v2\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:apify\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const apifyFirewall: FirewallConfig = {\n name: \"apify\",\n description: \"Apify API\",\n placeholders: {\n APIFY_TOKEN: \"apify_api_CoffeeSafeLocalCoffeeSafeLocalCoffee0\",\n },\n apis: [\n {\n base: \"https://api.apify.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.APIFY_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Asana API docs.\n// Source: https://developers.asana.com/docs/authentication\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:asana\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const asanaFirewall: FirewallConfig = {\n name: \"asana\",\n description: \"Asana API\",\n placeholders: {\n ASANA_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafe00\",\n },\n apis: [\n {\n base: \"https://app.asana.com/api\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.ASANA_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Atlassian (Jira + Confluence) official OpenAPI specs.\n// Sources:\n// - https://developer.atlassian.com/cloud/jira/platform/swagger-v3.v3.json\n// - https://developer.atlassian.com/cloud/confluence/swagger.v3.json\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:atlassian\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const atlassianFirewall: FirewallConfig = {\n name: \"atlassian\",\n description: \"Atlassian (Jira + Confluence) API\",\n placeholders: {\n ATLASSIAN_TOKEN:\n \"ATATT3xCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocal00Cof\",\n },\n apis: [\n {\n base: \"https://api.atlassian.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.ATLASSIAN_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"manage:confluence-configuration\",\n description: \"Manage global settings.\",\n rules: [\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/settings/lookandfeel\",\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/settings/lookandfeel\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/settings/lookandfeel/custom\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/settings/lookandfeel/custom\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/settings/systemInfo\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/settings/theme\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/settings/theme/selected\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/settings/theme/{themeKey}\",\n ],\n },\n {\n name: \"manage:jira-configuration\",\n description:\n \"Configure Jira settings that require the Jira administrators permission, for example, create projects and custom fields, view workflows, manage issue link types.\",\n rules: [\n \"GET /ex/jira/{cloudId}/rest/api/3/announcementBanner\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/announcementBanner\",\n \"POST /ex/jira/{cloudId}/rest/api/3/app/field/context/configuration/list\",\n \"GET /ex/jira/{cloudId}/rest/api/3/app/field/{fieldIdOrKey}/context/configuration\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/app/field/{fieldIdOrKey}/context/configuration\",\n \"GET /ex/jira/{cloudId}/rest/api/3/application-properties\",\n \"GET /ex/jira/{cloudId}/rest/api/3/application-properties/advanced-settings\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/application-properties/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/applicationrole\",\n \"GET /ex/jira/{cloudId}/rest/api/3/applicationrole/{key}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/auditing/record\",\n \"GET /ex/jira/{cloudId}/rest/api/3/avatar/{type}/system\",\n \"GET /ex/jira/{cloudId}/rest/api/3/config/fieldschemes\",\n \"POST /ex/jira/{cloudId}/rest/api/3/config/fieldschemes\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/fields\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/fields\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/fields/parameters\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/fields/parameters\",\n \"GET /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/projects\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/projects\",\n \"GET /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}/clone\",\n \"GET /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}/fields\",\n \"GET /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}/fields/{fieldId}/parameters\",\n \"GET /ex/jira/{cloudId}/rest/api/3/config/fieldschemes/{id}/projects\",\n \"GET /ex/jira/{cloudId}/rest/api/3/configuration/timetracking\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/configuration/timetracking\",\n \"GET /ex/jira/{cloudId}/rest/api/3/configuration/timetracking/list\",\n \"GET /ex/jira/{cloudId}/rest/api/3/configuration/timetracking/options\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/configuration/timetracking/options\",\n \"GET /ex/jira/{cloudId}/rest/api/3/events\",\n \"POST /ex/jira/{cloudId}/rest/api/3/field\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/field/association\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/field/association\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context\",\n \"POST /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context\",\n \"GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/defaultValue\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/defaultValue\",\n \"GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/issuetypemapping\",\n \"POST /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/mapping\",\n \"GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/projectmapping\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/issuetype\",\n \"POST /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/issuetype/remove\",\n \"GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/option\",\n \"POST /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/option\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/option\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/option/move\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/option/{optionId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/option/{optionId}/issue\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/project\",\n \"POST /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/context/{contextId}/project/remove\",\n \"GET /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option\",\n \"POST /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option\",\n \"GET /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option/{optionId}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option/{optionId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option/{optionId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option/{optionId}/issue\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/field/{id}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/field/{id}/restore\",\n \"POST /ex/jira/{cloudId}/rest/api/3/field/{id}/trash\",\n \"GET /ex/jira/{cloudId}/rest/api/3/fieldconfiguration\",\n \"POST /ex/jira/{cloudId}/rest/api/3/fieldconfiguration\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/fieldconfiguration/{id}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/fieldconfiguration/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/fieldconfiguration/{id}/fields\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/fieldconfiguration/{id}/fields\",\n \"GET /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme\",\n \"POST /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme\",\n \"GET /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/mapping\",\n \"GET /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/project\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/project\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/{id}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/{id}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/{id}/mapping\",\n \"POST /ex/jira/{cloudId}/rest/api/3/fieldconfigurationscheme/{id}/mapping/delete\",\n \"POST /ex/jira/{cloudId}/rest/api/3/group\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/group\",\n \"GET /ex/jira/{cloudId}/rest/api/3/group/member\",\n \"POST /ex/jira/{cloudId}/rest/api/3/group/user\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/group/user\",\n \"GET /ex/jira/{cloudId}/rest/api/3/instance/license\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issueLinkType\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issueLinkType/{issueLinkTypeId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issueLinkType/{issueLinkTypeId}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/level\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/level/default\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/level/member\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/project\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/project\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/search\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{issueSecuritySchemeId}/members\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{schemeId}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{schemeId}/level\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{schemeId}/level/{levelId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{schemeId}/level/{levelId}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{schemeId}/level/{levelId}/member\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{schemeId}/level/{levelId}/member/{memberId}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issuetype\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issuetype/{id}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issuetype/{id}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issuetype/{id}/avatar2\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issuetype/{issueTypeId}/properties/{propertyKey}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issuetype/{issueTypeId}/properties/{propertyKey}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuetypescheme\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issuetypescheme\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuetypescheme/mapping\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuetypescheme/project\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issuetypescheme/project\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issuetypescheme/{issueTypeSchemeId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issuetypescheme/{issueTypeSchemeId}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issuetypescheme/{issueTypeSchemeId}/issuetype\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issuetypescheme/{issueTypeSchemeId}/issuetype/move\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issuetypescheme/{issueTypeSchemeId}/issuetype/{issueTypeId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/mapping\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/project\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/project\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/{issueTypeScreenSchemeId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/{issueTypeScreenSchemeId}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/{issueTypeScreenSchemeId}/mapping\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/{issueTypeScreenSchemeId}/mapping/default\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/{issueTypeScreenSchemeId}/mapping/remove\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuetypescreenscheme/{issueTypeScreenSchemeId}/project\",\n \"POST /ex/jira/{cloudId}/rest/api/3/jql/sanitize\",\n \"GET /ex/jira/{cloudId}/rest/api/3/license/approximateLicenseCount\",\n \"GET /ex/jira/{cloudId}/rest/api/3/license/approximateLicenseCount/product/{applicationKey}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/mypreferences\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/mypreferences\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/mypreferences\",\n \"GET /ex/jira/{cloudId}/rest/api/3/mypreferences/locale\",\n \"GET /ex/jira/{cloudId}/rest/api/3/notificationscheme\",\n \"POST /ex/jira/{cloudId}/rest/api/3/notificationscheme\",\n \"GET /ex/jira/{cloudId}/rest/api/3/notificationscheme/project\",\n \"GET /ex/jira/{cloudId}/rest/api/3/notificationscheme/{id}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/notificationscheme/{id}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/notificationscheme/{id}/notification\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/notificationscheme/{notificationSchemeId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/notificationscheme/{notificationSchemeId}/notification/{notificationId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/permissions\",\n \"POST /ex/jira/{cloudId}/rest/api/3/permissionscheme\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}/permission\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}/permission/{permissionId}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/priority\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/priority/default\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/priority/move\",\n \"GET /ex/jira/{cloudId}/rest/api/3/priority/search\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/priority/{id}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/priority/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/priorityscheme\",\n \"POST /ex/jira/{cloudId}/rest/api/3/priorityscheme\",\n \"POST /ex/jira/{cloudId}/rest/api/3/priorityscheme/mappings\",\n \"GET /ex/jira/{cloudId}/rest/api/3/priorityscheme/priorities/available\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/priorityscheme/{schemeId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/priorityscheme/{schemeId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/priorityscheme/{schemeId}/priorities\",\n \"GET /ex/jira/{cloudId}/rest/api/3/priorityscheme/{schemeId}/projects\",\n \"POST /ex/jira/{cloudId}/rest/api/3/project\",\n \"POST /ex/jira/{cloudId}/rest/api/3/project-template\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/project-template/edit-template\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project-template/live-template\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/project-template/remove-template\",\n \"POST /ex/jira/{cloudId}/rest/api/3/project-template/save-template\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/delete\",\n \"POST /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/restore\",\n \"POST /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/role/{id}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/resolution\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/resolution/default\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/resolution/move\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/resolution/{id}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/resolution/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/role\",\n \"POST /ex/jira/{cloudId}/rest/api/3/role\",\n \"GET /ex/jira/{cloudId}/rest/api/3/role/{id}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/role/{id}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/role/{id}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/role/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/role/{id}/actors\",\n \"POST /ex/jira/{cloudId}/rest/api/3/role/{id}/actors\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/role/{id}/actors\",\n \"POST /ex/jira/{cloudId}/rest/api/3/screenscheme\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/screenscheme/{screenSchemeId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/securitylevel/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/settings/columns\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/settings/columns\",\n \"GET /ex/jira/{cloudId}/rest/api/3/statuses\",\n \"POST /ex/jira/{cloudId}/rest/api/3/statuses\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/statuses\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/statuses\",\n \"GET /ex/jira/{cloudId}/rest/api/3/statuses/byNames\",\n \"GET /ex/jira/{cloudId}/rest/api/3/statuses/search\",\n \"GET /ex/jira/{cloudId}/rest/api/3/statuses/{statusId}/project/{projectId}/issueTypeUsages\",\n \"GET /ex/jira/{cloudId}/rest/api/3/statuses/{statusId}/projectUsages\",\n \"GET /ex/jira/{cloudId}/rest/api/3/statuses/{statusId}/workflowUsages\",\n \"GET /ex/jira/{cloudId}/rest/api/3/universal_avatar/type/{type}/owner/{entityId}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/universal_avatar/type/{type}/owner/{entityId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/universal_avatar/type/{type}/owner/{owningObjectId}/avatar/{id}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/user\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/user\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/user/columns\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/user/columns\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflow\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflow\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflow/history\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflow/history/list\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflow/rule/config\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/workflow/rule/config\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflow/transitions/{transitionId}/properties\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflow/transitions/{transitionId}/properties\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/workflow/transitions/{transitionId}/properties\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/workflow/transitions/{transitionId}/properties\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/workflow/{entityId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflow/{workflowId}/project/{projectId}/issueTypeUsages\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflow/{workflowId}/projectUsages\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflow/{workflowId}/workflowSchemes\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflows\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflows/capabilities\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflows/create\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflows/create/validation\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflows/defaultEditor\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflows/preview\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflows/search\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflows/update\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflows/update/validation\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflowscheme\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflowscheme\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/project\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/project\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflowscheme/project/switch\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflowscheme/read\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflowscheme/update\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflowscheme/update/mappings\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/createdraft\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/default\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/default\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/default\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/default\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/default\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/default\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/issuetype/{issueType}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/issuetype/{issueType}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/issuetype/{issueType}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/publish\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/workflow\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/workflow\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/draft/workflow\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/issuetype/{issueType}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/issuetype/{issueType}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/issuetype/{issueType}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/workflow\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/workflow\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/workflowscheme/{id}/workflow\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflowscheme/{workflowSchemeId}/projectUsages\",\n ],\n },\n {\n name: \"manage:jira-project\",\n description:\n \"Create and edit project settings and create new project-level objects, for example, versions, components.\",\n rules: [\n \"POST /ex/jira/{cloudId}/rest/api/3/component\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/component/{id}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/component/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/contexts\",\n \"GET /ex/jira/{cloudId}/rest/api/3/field/{fieldId}/screens\",\n \"POST /ex/jira/{cloudId}/rest/api/3/forge/panel/action/bulk/async\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuesecurityschemes/{id}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/archive\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/avatar\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/avatar/{id}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/avatar2\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/classification-level/default\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/classification-level/default\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/features/{featureKey}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/properties/{propertyKey}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/properties/{propertyKey}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/role/{id}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/role/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectId}/email\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/project/{projectId}/email\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/project/{projectKeyOrId}/permissionscheme\",\n \"POST /ex/jira/{cloudId}/rest/api/3/projectCategory\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/projectCategory/{id}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/projectCategory/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/screens\",\n \"POST /ex/jira/{cloudId}/rest/api/3/screens\",\n \"POST /ex/jira/{cloudId}/rest/api/3/screens/addToDefault/{fieldId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/screens/tabs\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/screens/{screenId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/screens/{screenId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/availableFields\",\n \"GET /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs\",\n \"POST /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}/fields\",\n \"POST /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}/fields\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}/fields/{id}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}/fields/{id}/move\",\n \"POST /ex/jira/{cloudId}/rest/api/3/screens/{screenId}/tabs/{tabId}/move/{pos}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/screenscheme\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/screenscheme/{screenSchemeId}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/version\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/version/{id}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/version/{id}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/version/{id}/mergeto/{moveIssuesTo}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/version/{id}/move\",\n \"POST /ex/jira/{cloudId}/rest/api/3/version/{id}/removeAndSwap\",\n \"GET /ex/jira/{cloudId}/rest/api/3/workflow/search\",\n ],\n },\n {\n name: \"manage:jira-webhook\",\n description:\n \"Manage Jira webhooks. Enables an OAuth app to register and unregister dynamic webhooks in Jira. It also provides for fetching of registered webhooks.\",\n rules: [\n \"GET /ex/jira/{cloudId}/rest/api/3/webhook\",\n \"POST /ex/jira/{cloudId}/rest/api/3/webhook\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/webhook\",\n \"GET /ex/jira/{cloudId}/rest/api/3/webhook/failed\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/webhook/refresh\",\n ],\n },\n {\n name: \"read:audit-log:confluence\",\n description: \"View audit records.\",\n rules: [\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/audit\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/audit\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/audit/export\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/audit/retention\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/audit/since\",\n ],\n },\n {\n name: \"read:confluence-content.all\",\n description:\n \"Read all content, including content body (expansions permitted). Note, APIs using this scope may also return data allowed by read:confluence-space.summary. However, this scope is not a substitute for read:confluence-space.summary.\",\n rules: [\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/history/{version}/macro/id/{macroId}\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/history/{version}/macro/id/{macroId}/convert/async/{to}\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/history/{version}/macro/id/{macroId}/convert/{to}\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction/byOperation\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction/byOperation/{operationKey}\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction/byOperation/{operationKey}/byGroupId/{groupId}\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction/byOperation/{operationKey}/user\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/contentbody/convert/async/bulk/tasks\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/contentbody/convert/async/bulk/tasks\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/contentbody/convert/async/{id}\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/contentbody/convert/async/{to}\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/state/content\",\n ],\n },\n {\n name: \"read:confluence-content.permission\",\n description: \"Read content permissions.\",\n rules: [\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/permission/check\",\n ],\n },\n {\n name: \"read:confluence-content.summary\",\n description:\n \"Read a summary of the content, which is the content without expansions. Note, APIs using this scope may also return data allowed by read:confluence-space.summary. However, this scope is not a substitute for read:confluence-space.summary.\",\n rules: [\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/analytics/content/{contentId}/viewers\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/analytics/content/{contentId}/views\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/descendant\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/descendant/{type}\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/notification/child-created\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/notification/created\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/state\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/label\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/relation/{relationName}/from/{sourceType}/{sourceKey}/to/{targetType}\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/relation/{relationName}/from/{sourceType}/{sourceKey}/to/{targetType}/{targetKey}\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/relation/{relationName}/to/{targetType}/{targetKey}/from/{sourceType}\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/template/blueprint\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/template/page\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/template/{contentTemplateId}\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/user/watch/content/{contentId}\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/user/watch/label/{labelName}\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/user/watch/space/{spaceKey}\",\n ],\n },\n {\n name: \"read:confluence-groups\",\n description: \"Read user groups.\",\n rules: [\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/group\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/group/by-id\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/group/picker\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/group/{groupId}/membersByGroupId\",\n ],\n },\n {\n name: \"read:confluence-space.summary\",\n description:\n \"Read a summary of space information without expansions.\",\n rules: [\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/longtask/{id}\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/label\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/settings\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/state\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/state/settings\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/theme\",\n ],\n },\n {\n name: \"read:confluence-user\",\n description: \"Read users.\",\n rules: [\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/user\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/user/anonymous\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/user/bulk\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/user/current\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/user/memberof\",\n ],\n },\n {\n name: \"read:content-details:confluence\",\n description: \"View content details.\",\n rules: [\"GET /ex/confluence/{cloudId}/wiki/rest/api/search/user\"],\n },\n {\n name: \"read:content.metadata:confluence\",\n description: \"View content summaries.\",\n rules: [\"GET /ex/confluence/{cloudId}/wiki/rest/api/longtask\"],\n },\n {\n name: \"read:jira-user\",\n description:\n \"View user information in Jira that you have access to, including usernames, email addresses, and avatars.\",\n rules: [\n \"GET /ex/jira/{cloudId}/rest/api/3/configuration\",\n \"POST /ex/jira/{cloudId}/rest/api/3/expression/analyse\",\n \"POST /ex/jira/{cloudId}/rest/api/3/expression/eval\",\n \"POST /ex/jira/{cloudId}/rest/api/3/expression/evaluate\",\n \"GET /ex/jira/{cloudId}/rest/api/3/group\",\n \"GET /ex/jira/{cloudId}/rest/api/3/group/bulk\",\n \"GET /ex/jira/{cloudId}/rest/api/3/groups/picker\",\n \"POST /ex/jira/{cloudId}/rest/api/3/jql/pdcleaner\",\n \"GET /ex/jira/{cloudId}/rest/api/3/myself\",\n \"GET /ex/jira/{cloudId}/rest/api/3/user\",\n \"GET /ex/jira/{cloudId}/rest/api/3/user/assignable/multiProjectSearch\",\n \"GET /ex/jira/{cloudId}/rest/api/3/user/assignable/search\",\n \"GET /ex/jira/{cloudId}/rest/api/3/user/bulk\",\n \"GET /ex/jira/{cloudId}/rest/api/3/user/bulk/migration\",\n \"GET /ex/jira/{cloudId}/rest/api/3/user/columns\",\n \"GET /ex/jira/{cloudId}/rest/api/3/user/groups\",\n \"GET /ex/jira/{cloudId}/rest/api/3/user/permission/search\",\n \"GET /ex/jira/{cloudId}/rest/api/3/user/picker\",\n \"GET /ex/jira/{cloudId}/rest/api/3/user/properties\",\n \"GET /ex/jira/{cloudId}/rest/api/3/user/properties/{propertyKey}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/user/search\",\n \"GET /ex/jira/{cloudId}/rest/api/3/user/search/query\",\n \"GET /ex/jira/{cloudId}/rest/api/3/user/search/query/key\",\n \"GET /ex/jira/{cloudId}/rest/api/3/user/viewissue/search\",\n \"GET /ex/jira/{cloudId}/rest/api/3/users\",\n \"GET /ex/jira/{cloudId}/rest/api/3/users/search\",\n ],\n },\n {\n name: \"read:jira-work\",\n description:\n \"Read project and issue data. Search for issues and objects associated with issues (such as attachments and worklogs).\",\n rules: [\n \"GET /ex/jira/{cloudId}/rest/api/3/attachment/content/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/attachment/meta\",\n \"GET /ex/jira/{cloudId}/rest/api/3/attachment/thumbnail/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/attachment/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/attachment/{id}/expand/human\",\n \"GET /ex/jira/{cloudId}/rest/api/3/attachment/{id}/expand/raw\",\n \"GET /ex/jira/{cloudId}/rest/api/3/bulk/issues/fields\",\n \"GET /ex/jira/{cloudId}/rest/api/3/bulk/issues/transition\",\n \"GET /ex/jira/{cloudId}/rest/api/3/bulk/queue/{taskId}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/changelog/bulkfetch\",\n \"GET /ex/jira/{cloudId}/rest/api/3/classification-levels\",\n \"POST /ex/jira/{cloudId}/rest/api/3/comment/list\",\n \"GET /ex/jira/{cloudId}/rest/api/3/comment/{commentId}/properties\",\n \"GET /ex/jira/{cloudId}/rest/api/3/comment/{commentId}/properties/{propertyKey}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/component\",\n \"GET /ex/jira/{cloudId}/rest/api/3/component/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/component/{id}/relatedIssueCounts\",\n \"GET /ex/jira/{cloudId}/rest/api/3/customFieldOption/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/dashboard\",\n \"GET /ex/jira/{cloudId}/rest/api/3/dashboard/gadgets\",\n \"GET /ex/jira/{cloudId}/rest/api/3/dashboard/search\",\n \"GET /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/gadget\",\n \"POST /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/gadget\",\n \"GET /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/items/{itemId}/properties\",\n \"GET /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/items/{itemId}/properties/{propertyKey}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/dashboard/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/data-policy\",\n \"GET /ex/jira/{cloudId}/rest/api/3/data-policy/project\",\n \"POST /ex/jira/{cloudId}/rest/api/3/expression/analyse\",\n \"POST /ex/jira/{cloudId}/rest/api/3/expression/eval\",\n \"POST /ex/jira/{cloudId}/rest/api/3/expression/evaluate\",\n \"GET /ex/jira/{cloudId}/rest/api/3/field\",\n \"GET /ex/jira/{cloudId}/rest/api/3/field/search\",\n \"GET /ex/jira/{cloudId}/rest/api/3/field/search/trashed\",\n \"GET /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option/suggestions/edit\",\n \"GET /ex/jira/{cloudId}/rest/api/3/field/{fieldKey}/option/suggestions/search\",\n \"GET /ex/jira/{cloudId}/rest/api/3/filter/defaultShareScope\",\n \"GET /ex/jira/{cloudId}/rest/api/3/filter/favourite\",\n \"GET /ex/jira/{cloudId}/rest/api/3/filter/my\",\n \"GET /ex/jira/{cloudId}/rest/api/3/filter/search\",\n \"GET /ex/jira/{cloudId}/rest/api/3/filter/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/filter/{id}/columns\",\n \"GET /ex/jira/{cloudId}/rest/api/3/filter/{id}/permission\",\n \"GET /ex/jira/{cloudId}/rest/api/3/filter/{id}/permission/{permissionId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/groupuserpicker\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue/bulkfetch\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/createmeta\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/createmeta/{projectIdOrKey}/issuetypes\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/createmeta/{projectIdOrKey}/issuetypes/{issueTypeId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/limit/report\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/picker\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue/watching\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/changelog\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/changelog/list\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/editmeta\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/properties\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/properties/{propertyKey}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/remotelink\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/remotelink/{linkId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/transitions\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/votes\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/watchers\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{worklogId}/properties\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{worklogId}/properties/{propertyKey}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issueLink/{linkId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issueLinkType\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issueLinkType/{issueLinkTypeId}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issues/archive/export\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuetype\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuetype/project\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuetype/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuetype/{id}/alternatives\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuetype/{issueTypeId}/properties\",\n \"GET /ex/jira/{cloudId}/rest/api/3/issuetype/{issueTypeId}/properties/{propertyKey}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/jql/autocompletedata\",\n \"POST /ex/jira/{cloudId}/rest/api/3/jql/autocompletedata\",\n \"GET /ex/jira/{cloudId}/rest/api/3/jql/autocompletedata/suggestions\",\n \"POST /ex/jira/{cloudId}/rest/api/3/jql/match\",\n \"POST /ex/jira/{cloudId}/rest/api/3/jql/parse\",\n \"GET /ex/jira/{cloudId}/rest/api/3/label\",\n \"GET /ex/jira/{cloudId}/rest/api/3/mypermissions\",\n \"POST /ex/jira/{cloudId}/rest/api/3/permissions/project\",\n \"GET /ex/jira/{cloudId}/rest/api/3/permissionscheme\",\n \"GET /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}/permission\",\n \"GET /ex/jira/{cloudId}/rest/api/3/permissionscheme/{schemeId}/permission/{permissionId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/plans/plan\",\n \"GET /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team\",\n \"GET /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/atlassian/{atlassianTeamId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/planonly/{planOnlyTeamId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/priority\",\n \"GET /ex/jira/{cloudId}/rest/api/3/priority/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/recent\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/search\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/type\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/type/accessible\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/type/{projectTypeKey}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/type/{projectTypeKey}/accessible\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/avatars\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/classification-config\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/classification-level/default\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/component\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/components\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/features\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/properties\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/properties/{propertyKey}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/role\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/role/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/roledetails\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/statuses\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/version\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectIdOrKey}/versions\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectId}/hierarchy\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectKeyOrId}/issuesecuritylevelscheme\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectKeyOrId}/notificationscheme\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectKeyOrId}/permissionscheme\",\n \"GET /ex/jira/{cloudId}/rest/api/3/project/{projectKeyOrId}/securitylevel\",\n \"GET /ex/jira/{cloudId}/rest/api/3/projectCategory\",\n \"GET /ex/jira/{cloudId}/rest/api/3/projectCategory/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/projects/fields\",\n \"GET /ex/jira/{cloudId}/rest/api/3/projectvalidate/key\",\n \"GET /ex/jira/{cloudId}/rest/api/3/projectvalidate/validProjectKey\",\n \"GET /ex/jira/{cloudId}/rest/api/3/projectvalidate/validProjectName\",\n \"GET /ex/jira/{cloudId}/rest/api/3/resolution\",\n \"GET /ex/jira/{cloudId}/rest/api/3/resolution/search\",\n \"GET /ex/jira/{cloudId}/rest/api/3/resolution/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/search\",\n \"POST /ex/jira/{cloudId}/rest/api/3/search\",\n \"POST /ex/jira/{cloudId}/rest/api/3/search/approximate-count\",\n \"GET /ex/jira/{cloudId}/rest/api/3/search/jql\",\n \"POST /ex/jira/{cloudId}/rest/api/3/search/jql\",\n \"GET /ex/jira/{cloudId}/rest/api/3/status\",\n \"GET /ex/jira/{cloudId}/rest/api/3/status/{idOrName}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/statuscategory\",\n \"GET /ex/jira/{cloudId}/rest/api/3/statuscategory/{idOrKey}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/task/{taskId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/uiModifications\",\n \"POST /ex/jira/{cloudId}/rest/api/3/uiModifications\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/uiModifications/{uiModificationId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/universal_avatar/view/type/{type}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/universal_avatar/view/type/{type}/avatar/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/universal_avatar/view/type/{type}/owner/{entityId}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/version/{id}\",\n \"GET /ex/jira/{cloudId}/rest/api/3/version/{id}/relatedIssueCounts\",\n \"GET /ex/jira/{cloudId}/rest/api/3/version/{id}/relatedwork\",\n \"GET /ex/jira/{cloudId}/rest/api/3/version/{id}/unresolvedIssueCount\",\n \"GET /ex/jira/{cloudId}/rest/api/3/webhook\",\n \"POST /ex/jira/{cloudId}/rest/api/3/webhook\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/webhook\",\n \"GET /ex/jira/{cloudId}/rest/api/3/webhook/failed\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/webhook/refresh\",\n \"GET /ex/jira/{cloudId}/rest/api/3/worklog/deleted\",\n \"POST /ex/jira/{cloudId}/rest/api/3/worklog/list\",\n \"GET /ex/jira/{cloudId}/rest/api/3/worklog/updated\",\n ],\n },\n {\n name: \"read:space.permission:confluence\",\n description: \"View space permissions.\",\n rules: [\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/permission\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/permission/custom-content\",\n ],\n },\n {\n name: \"read:user:confluence\",\n description: \"View user details.\",\n rules: [\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/watch\",\n ],\n },\n {\n name: \"read:user.property:confluence\",\n description: \"View user properties.\",\n rules: [\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content-states\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/user/{userId}/property\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/user/{userId}/property/{key}\",\n ],\n },\n {\n name: \"read:watcher:confluence\",\n description: \"View content watchers.\",\n rules: [\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/watch\",\n ],\n },\n {\n name: \"readonly:content.attachment:confluence\",\n description:\n \"Download attachments of a Confluence page or blogpost that you have access to.\",\n rules: [\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/child/attachment/{attachmentId}/download\",\n ],\n },\n {\n name: \"search:confluence\",\n description:\n \"Search Confluence. Note, APIs using this scope may also return data allowed by read:confluence-space.summary and read:confluence-content.summary. However, this scope is not a substitute for read:confluence-space.summary or read:confluence-content.summary.\",\n rules: [\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content/search\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/search\",\n ],\n },\n {\n name: \"write:audit-log:confluence\",\n description: \"Create audit records.\",\n rules: [\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/audit\",\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/audit/retention\",\n ],\n },\n {\n name: \"write:confluence-content\",\n description:\n \"Permits the creation of pages, blogs, comments and questions.\",\n rules: [\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/content/archive\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/content/blueprint/instance/{draftId}\",\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/content/blueprint/instance/{draftId}\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/copy\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/label\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/label\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/label/{label}\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/pageTree\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/pagehierarchy/copy\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction\",\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction\",\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction/byOperation/{operationKey}/byGroupId/{groupId}\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction/byOperation/{operationKey}/byGroupId/{groupId}\",\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction/byOperation/{operationKey}/user\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/restriction/byOperation/{operationKey}/user\",\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/state\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/state\",\n \"GET /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/state/available\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/version\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/version/{versionNumber}\",\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/content/{pageId}/move/{position}/{targetId}\",\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/relation/{relationName}/from/{sourceType}/{sourceKey}/to/{targetType}/{targetKey}\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/relation/{relationName}/from/{sourceType}/{sourceKey}/to/{targetType}/{targetKey}\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/template\",\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/template\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/template/{contentTemplateId}\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/user/watch/content/{contentId}\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/user/watch/content/{contentId}\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/user/watch/label/{labelName}\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/user/watch/label/{labelName}\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/user/watch/space/{spaceKey}\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/user/watch/space/{spaceKey}\",\n ],\n },\n {\n name: \"write:confluence-file\",\n description: \"Upload attachments.\",\n rules: [\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/child/attachment\",\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/child/attachment\",\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/child/attachment/{attachmentId}\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/child/attachment/{attachmentId}/data\",\n ],\n },\n {\n name: \"write:confluence-groups\",\n description: \"Create, remove and update user groups.\",\n rules: [\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/group\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/group/by-id\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/group/userByGroupId\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/group/userByGroupId\",\n ],\n },\n {\n name: \"write:confluence-props\",\n description: \"Write content properties.\",\n rules: [\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/content/{id}/child/attachment/{attachmentId}\",\n ],\n },\n {\n name: \"write:confluence-space\",\n description: \"Create, update and delete space information.\",\n rules: [\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/space\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/space/_private\",\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/label\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/label\",\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/settings\",\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/theme\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/theme\",\n ],\n },\n {\n name: \"write:jira-work\",\n description:\n \"Create and edit issues in Jira, post comments, create worklogs, and delete issues.\",\n rules: [\n \"DELETE /ex/jira/{cloudId}/rest/api/3/attachment/{id}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/bulk/issues/delete\",\n \"POST /ex/jira/{cloudId}/rest/api/3/bulk/issues/fields\",\n \"POST /ex/jira/{cloudId}/rest/api/3/bulk/issues/move\",\n \"POST /ex/jira/{cloudId}/rest/api/3/bulk/issues/transition\",\n \"POST /ex/jira/{cloudId}/rest/api/3/bulk/issues/unwatch\",\n \"POST /ex/jira/{cloudId}/rest/api/3/bulk/issues/watch\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/comment/{commentId}/properties/{propertyKey}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/comment/{commentId}/properties/{propertyKey}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/dashboard\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/dashboard/bulk/edit\",\n \"POST /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/gadget\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/gadget/{gadgetId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/gadget/{gadgetId}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/items/{itemId}/properties/{propertyKey}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/dashboard/{dashboardId}/items/{itemId}/properties/{propertyKey}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/dashboard/{id}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/dashboard/{id}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/dashboard/{id}/copy\",\n \"POST /ex/jira/{cloudId}/rest/api/3/filter\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/filter/defaultShareScope\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/filter/{id}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/filter/{id}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/filter/{id}/columns\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/filter/{id}/columns\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/filter/{id}/favourite\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/filter/{id}/favourite\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/filter/{id}/owner\",\n \"POST /ex/jira/{cloudId}/rest/api/3/filter/{id}/permission\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/filter/{id}/permission/{permissionId}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue/archive\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issue/archive\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue/bulk\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue/properties\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue/properties/multi\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issue/properties/{propertyKey}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issue/properties/{propertyKey}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issue/unarchive\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/assignee\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/attachments\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment/{id}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment/{id}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/notify\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/properties/{propertyKey}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/properties/{propertyKey}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/remotelink\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/remotelink\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/remotelink/{linkId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/remotelink/{linkId}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/transitions\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/votes\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/votes\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/watchers\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/watchers\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/move\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{id}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{id}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{worklogId}/properties/{propertyKey}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/worklog/{worklogId}/properties/{propertyKey}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/issueLink\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/issueLink/{linkId}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/plans/plan\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/archive\",\n \"POST /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/duplicate\",\n \"POST /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/atlassian\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/atlassian/{atlassianTeamId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/atlassian/{atlassianTeamId}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/planonly\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/planonly/{planOnlyTeamId}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/team/planonly/{planOnlyTeamId}\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/plans/plan/{planId}/trash\",\n \"POST /ex/jira/{cloudId}/rest/api/3/task/{taskId}/cancel\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/user/properties/{propertyKey}\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/user/properties/{propertyKey}\",\n \"POST /ex/jira/{cloudId}/rest/api/3/version/{id}/relatedwork\",\n \"PUT /ex/jira/{cloudId}/rest/api/3/version/{id}/relatedwork\",\n \"DELETE /ex/jira/{cloudId}/rest/api/3/version/{versionId}/relatedwork/{relatedWorkId}\",\n ],\n },\n {\n name: \"write:space.permission:confluence\",\n description: \"Update space permissions.\",\n rules: [\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/permission\",\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/permission/custom-content\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/space/{spaceKey}/permission/{id}\",\n ],\n },\n {\n name: \"write:user.property:confluence\",\n description: \"Create, update and delete user properties.\",\n rules: [\n \"POST /ex/confluence/{cloudId}/wiki/rest/api/user/{userId}/property/{key}\",\n \"PUT /ex/confluence/{cloudId}/wiki/rest/api/user/{userId}/property/{key}\",\n \"DELETE /ex/confluence/{cloudId}/wiki/rest/api/user/{userId}/property/{key}\",\n ],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Axiom API docs.\n// Source: https://axiom.co/docs/reference/tokens\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:axiom\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const axiomFirewall: FirewallConfig = {\n name: \"axiom\",\n description: \"Axiom API\",\n placeholders: {\n AXIOM_TOKEN: \"xaat-c0ffee5a-fe10-ca1c-0ffe-e5afe10ca1c0\",\n },\n apis: [\n {\n base: \"https://api.axiom.co\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.AXIOM_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Brave Search API docs.\n// Source: https://api-dashboard.search.brave.com/documentation/guides/authentication\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:brave-search\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const braveSearchFirewall: FirewallConfig = {\n name: \"brave-search\",\n description: \"Brave Search API\",\n placeholders: {\n BRAVE_API_KEY: \"BSACoffeeSafeLocalCoffeeSafe000\",\n },\n apis: [\n {\n base: \"https://api.search.brave.com\",\n auth: {\n headers: {\n \"X-Subscription-Token\": \"${{ secrets.BRAVE_API_KEY }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Brevo API docs.\n// Source: https://developers.brevo.com/docs/authentication-schemes\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:brevo\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const brevoFirewall: FirewallConfig = {\n name: \"brevo\",\n description: \"Brevo API\",\n placeholders: {\n BREVO_TOKEN:\n \"xkeysib-c0ffee5afe10ca1c0ffee5afe10ca1c0ffee5afe10ca1c0ffee5afe10ca1a\",\n },\n apis: [\n {\n base: \"https://api.brevo.com\",\n auth: {\n headers: {\n \"api-key\": \"${{ secrets.BREVO_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Bright Data API docs.\n// Source: https://docs.brightdata.com/api-reference\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:bright-data\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const brightDataFirewall: FirewallConfig = {\n name: \"bright-data\",\n description: \"Bright Data API\",\n placeholders: {\n BRIGHTDATA_TOKEN:\n \"c0ffee5afe10ca1c0ffee5afe10ca1c0ffee5afe10ca1c0ffee5afe10ca1c0ff\",\n },\n apis: [\n {\n base: \"https://api.brightdata.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.BRIGHTDATA_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Browserbase API docs.\n// Source: https://docs.browserbase.com/reference/api/overview\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:browserbase\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const browserbaseFirewall: FirewallConfig = {\n name: \"browserbase\",\n description: \"Browserbase API\",\n placeholders: {\n BROWSERBASE_TOKEN: \"bb_CoffeeSafeLocal_CoffeeSafeLocalCoffeeSafeLocal\",\n },\n apis: [\n {\n base: \"https://api.browserbase.com\",\n auth: {\n headers: {\n \"X-BB-API-Key\": \"${{ secrets.BROWSERBASE_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Browserless API docs.\n// Source: https://docs.browserless.io/rest-apis/intro\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:browserless\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const browserlessFirewall: FirewallConfig = {\n name: \"browserless\",\n description: \"Browserless API\",\n placeholders: {\n BROWSERLESS_TOKEN: \"c0ffee5a-fe10-ca1c-0ffe-e5afe10ca1c0\",\n },\n apis: [\n {\n base: \"https://production-sfo.browserless.io\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.BROWSERLESS_TOKEN }}\",\n },\n },\n permissions: [],\n },\n {\n base: \"https://production-lon.browserless.io\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.BROWSERLESS_TOKEN }}\",\n },\n },\n permissions: [],\n },\n {\n base: \"https://production-ams.browserless.io\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.BROWSERLESS_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Cal.com API docs.\n// Source: https://cal.com/docs/api-reference/v2/introduction\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:cal-com\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const calComFirewall: FirewallConfig = {\n name: \"cal-com\",\n description: \"Cal.com API\",\n placeholders: {\n CALCOM_TOKEN: \"cal_live_CoffeeSafeLocalCoffeeSafeLocalCof00a\",\n },\n apis: [\n {\n base: \"https://api.cal.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.CALCOM_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Calendly API docs.\n// Source: https://developer.calendly.com/getting-started\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:calendly\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const calendlyFirewall: FirewallConfig = {\n name: \"calendly\",\n description: \"Calendly API\",\n placeholders: {\n CALENDLY_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafe00\",\n },\n apis: [\n {\n base: \"https://api.calendly.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.CALENDLY_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Canva Connect API docs.\n// Source: https://www.canva.dev/docs/connect/authentication/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:canva\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const canvaFirewall: FirewallConfig = {\n name: \"canva\",\n description: \"Canva Connect API\",\n placeholders: {\n CANVA_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSa0\",\n },\n apis: [\n {\n base: \"https://api.canva.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.CANVA_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Chatwoot API docs.\n// Source: https://www.chatwoot.com/developers/api/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:chatwoot\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const chatwootFirewall: FirewallConfig = {\n name: \"chatwoot\",\n description: \"Chatwoot API\",\n placeholders: {\n CHATWOOT_TOKEN: \"CoffeeSafeLocalCoffeeSaf\",\n },\n apis: [\n {\n base: \"https://app.chatwoot.com\",\n auth: {\n headers: {\n api_access_token: \"${{ secrets.CHATWOOT_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from ClickUp API docs.\n// Source: https://developer.clickup.com/docs/authentication\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:clickup\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const clickupFirewall: FirewallConfig = {\n name: \"clickup\",\n description: \"ClickUp API\",\n placeholders: {\n CLICKUP_TOKEN: \"pk_1001001_COFFEESAFELOCALCOFFEESAFELOCALCOFF\",\n },\n apis: [\n {\n base: \"https://api.clickup.com/api\",\n auth: {\n headers: {\n Authorization: \"${{ secrets.CLICKUP_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Close CRM API docs.\n// Source: https://developer.close.com/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:close\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const closeFirewall: FirewallConfig = {\n name: \"close\",\n description: \"Close CRM API\",\n placeholders: {\n CLOSE_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalC\",\n },\n apis: [\n {\n base: \"https://api.close.com/api\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.CLOSE_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Cloudflare API docs.\n// Source: https://developers.cloudflare.com/fundamentals/api/how-to/make-api-calls/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:cloudflare\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const cloudflareFirewall: FirewallConfig = {\n name: \"cloudflare\",\n description: \"Cloudflare API\",\n placeholders: {\n CLOUDFLARE_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafe\",\n },\n apis: [\n {\n base: \"https://api.cloudflare.com/client\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.CLOUDFLARE_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Cronlytic API docs.\n// Source: https://www.cronlytic.com/api-documentation\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:cronlytic\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const cronlyticFirewall: FirewallConfig = {\n name: \"cronlytic\",\n description: \"Cronlytic API\",\n placeholders: {\n CRONLYTIC_API_KEY:\n \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafe\",\n CRONLYTIC_USER_ID:\n \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSaf0\",\n },\n apis: [\n {\n base: \"https://api.cronlytic.com\",\n auth: {\n headers: {\n \"x-api-key\": \"${{ secrets.CRONLYTIC_API_KEY }}\",\n \"x-user-id\": \"${{ secrets.CRONLYTIC_USER_ID }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Customer.io API docs.\n// Source: https://docs.customer.io/integrations/api/app/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:customer-io\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const customerIoFirewall: FirewallConfig = {\n name: \"customer-io\",\n description: \"Customer.io API\",\n placeholders: {\n CUSTOMERIO_APP_TOKEN:\n \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeL\",\n },\n apis: [\n {\n base: \"https://api.customer.io\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.CUSTOMERIO_APP_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from DeepSeek API docs.\n// Source: https://api-docs.deepseek.com/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:deepseek\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const deepseekFirewall: FirewallConfig = {\n name: \"deepseek\",\n description: \"DeepSeek API\",\n placeholders: {\n DEEPSEEK_TOKEN: \"sk-c0ffee5afe10ca1c0ffee5afe10ca1c0\",\n },\n apis: [\n {\n base: \"https://api.deepseek.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.DEEPSEEK_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Deel API docs.\n// Source: https://developer.deel.com/api/authentication\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:deel\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const deelFirewall: FirewallConfig = {\n name: \"deel\",\n description: \"Deel API\",\n placeholders: {\n DEEL_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafe\",\n },\n apis: [\n {\n base: \"https://api.letsdeel.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.DEEL_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from DEV.to (Forem) API docs.\n// Source: https://developers.forem.com/api/v0\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:devto\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const devtoFirewall: FirewallConfig = {\n name: \"devto\",\n description: \"DEV.to API\",\n placeholders: {\n DEVTO_TOKEN: \"CoffeeSafeLocalCoffeeSaf\",\n },\n apis: [\n {\n base: \"https://dev.to/api\",\n auth: {\n headers: {\n \"api-key\": \"${{ secrets.DEVTO_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Dify API docs.\n// Source: https://docs.dify.ai/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:dify\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const difyFirewall: FirewallConfig = {\n name: \"dify\",\n description: \"Dify API\",\n placeholders: {\n DIFY_TOKEN: \"app-CoffeeSafeLocalCoffeeSa\",\n },\n apis: [\n {\n base: \"https://api.dify.ai\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.DIFY_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Discord API docs.\n// Source: https://discord.com/developers/docs/reference#authentication\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:discord\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const discordFirewall: FirewallConfig = {\n name: \"discord\",\n description: \"Discord API\",\n placeholders: {\n DISCORD_BOT_TOKEN:\n \"CoffeeSafeLocalCoffeeSaf.Coffee.CoffeeSafeLocalCoffeeSafeLo\",\n },\n apis: [\n {\n base: \"https://discord.com/api\",\n auth: {\n headers: {\n Authorization: \"Bot ${{ secrets.DISCORD_BOT_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from DocuSign API docs.\n// Source: https://developers.docusign.com/platform/api-endpoint-base-paths/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:docusign\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const docusignFirewall: FirewallConfig = {\n name: \"docusign\",\n description: \"DocuSign eSignature REST API\",\n placeholders: {\n DOCUSIGN_TOKEN:\n \"eyJ0eXAiOiJNVCIsImFsZyI6IlJTMjU2In0.CoffeeSafeLocalCoffeeSafeLocal.CoffeeSaf\",\n },\n apis: [\n {\n base: \"https://www.docusign.net\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.DOCUSIGN_TOKEN }}\",\n },\n },\n permissions: [],\n },\n {\n base: \"https://na2.docusign.net\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.DOCUSIGN_TOKEN }}\",\n },\n },\n permissions: [],\n },\n {\n base: \"https://na3.docusign.net\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.DOCUSIGN_TOKEN }}\",\n },\n },\n permissions: [],\n },\n {\n base: \"https://na4.docusign.net\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.DOCUSIGN_TOKEN }}\",\n },\n },\n permissions: [],\n },\n {\n base: \"https://eu.docusign.net\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.DOCUSIGN_TOKEN }}\",\n },\n },\n permissions: [],\n },\n {\n base: \"https://au.docusign.net\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.DOCUSIGN_TOKEN }}\",\n },\n },\n permissions: [],\n },\n {\n base: \"https://ca.docusign.net\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.DOCUSIGN_TOKEN }}\",\n },\n },\n permissions: [],\n },\n {\n base: \"https://demo.docusign.net\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.DOCUSIGN_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Dropbox API docs.\n// Source: https://www.dropbox.com/developers/reference/auth-types\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:dropbox\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const dropboxFirewall: FirewallConfig = {\n name: \"dropbox\",\n description: \"Dropbox API\",\n placeholders: {\n DROPBOX_TOKEN:\n \"sl.CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafe\",\n },\n apis: [\n {\n base: \"https://api.dropboxapi.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.DROPBOX_TOKEN }}\",\n },\n },\n permissions: [],\n },\n {\n base: \"https://content.dropboxapi.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.DROPBOX_TOKEN }}\",\n },\n },\n permissions: [],\n },\n {\n base: \"https://notify.dropboxapi.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.DROPBOX_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from ElevenLabs API docs.\n// Source: https://elevenlabs.io/docs/api-reference/authentication\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:elevenlabs\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const elevenlabsFirewall: FirewallConfig = {\n name: \"elevenlabs\",\n description: \"ElevenLabs API\",\n placeholders: {\n ELEVENLABS_TOKEN: \"c0ffee5afe10ca1c0ffee5afe10ca1c0\",\n },\n apis: [\n {\n base: \"https://api.elevenlabs.io\",\n auth: {\n headers: {\n \"xi-api-key\": \"${{ secrets.ELEVENLABS_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Explorium API docs.\n// Source: https://developers.explorium.ai/reference/introduction\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:explorium\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const exploriumFirewall: FirewallConfig = {\n name: \"explorium\",\n description: \"Explorium API\",\n placeholders: {\n EXPLORIUM_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafe\",\n },\n apis: [\n {\n base: \"https://api.explorium.ai\",\n auth: {\n headers: {\n api_key: \"${{ secrets.EXPLORIUM_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from fal.ai API docs.\n// Source: https://fal.ai/docs/reference/platform-apis/authentication\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:fal\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const falFirewall: FirewallConfig = {\n name: \"fal\",\n description: \"fal.ai API\",\n placeholders: {\n FAL_TOKEN: \"CoffeeSafeLocalC:sk_live_CoffeeSafeLocalCoffeeSafeLo\",\n },\n apis: [\n {\n base: \"https://fal.run\",\n auth: {\n headers: {\n Authorization: \"Key ${{ secrets.FAL_TOKEN }}\",\n },\n },\n permissions: [],\n },\n {\n base: \"https://queue.fal.run\",\n auth: {\n headers: {\n Authorization: \"Key ${{ secrets.FAL_TOKEN }}\",\n },\n },\n permissions: [],\n },\n {\n base: \"https://api.fal.ai\",\n auth: {\n headers: {\n Authorization: \"Key ${{ secrets.FAL_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Figma's official OpenAPI spec.\n// Source: https://github.com/figma/rest-api-spec\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:figma\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const figmaFirewall: FirewallConfig = {\n name: \"figma\",\n description: \"Figma API\",\n placeholders: {\n FIGMA_TOKEN: \"figd_CoffeeSafeLocalCoffeeSafeLocalCoffeeSafe\",\n },\n apis: [\n {\n base: \"https://api.figma.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.FIGMA_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"current_user:read\",\n description: \"Read your name, email, and profile image.\",\n rules: [\"GET /v1/me\"],\n },\n {\n name: \"file_comments:read\",\n description: \"Read the comments for files.\",\n rules: [\n \"GET /v1/files/{file_key}/comments\",\n \"GET /v1/files/{file_key}/comments/{comment_id}/reactions\",\n ],\n },\n {\n name: \"file_comments:write\",\n description:\n \"Post and delete comments and comment reactions in files.\",\n rules: [\n \"POST /v1/files/{file_key}/comments\",\n \"DELETE /v1/files/{file_key}/comments/{comment_id}\",\n \"POST /v1/files/{file_key}/comments/{comment_id}/reactions\",\n \"DELETE /v1/files/{file_key}/comments/{comment_id}/reactions\",\n ],\n },\n {\n name: \"file_content:read\",\n description:\n \"Read the contents of files, such as nodes and the editor type.\",\n rules: [\n \"GET /v1/files/{file_key}\",\n \"GET /v1/files/{file_key}/images\",\n \"GET /v1/files/{file_key}/nodes\",\n \"GET /v1/images/{file_key}\",\n ],\n },\n {\n name: \"file_dev_resources:read\",\n description: \"Read dev resources in files.\",\n rules: [\"GET /v1/files/{file_key}/dev_resources\"],\n },\n {\n name: \"file_dev_resources:write\",\n description: \"Write to dev resources in files.\",\n rules: [\n \"POST /v1/dev_resources\",\n \"PUT /v1/dev_resources\",\n \"DELETE /v1/files/{file_key}/dev_resources/{dev_resource_id}\",\n ],\n },\n {\n name: \"file_metadata:read\",\n description: \"Read metadata of files.\",\n rules: [\"GET /v1/files/{file_key}/meta\", \"GET /v1/oembed\"],\n },\n {\n name: \"file_variables:read\",\n description:\n \"Read variables in Figma file. Note: this is only available to members in Enterprise organizations.\",\n rules: [\n \"GET /v1/files/{file_key}/variables/local\",\n \"GET /v1/files/{file_key}/variables/published\",\n ],\n },\n {\n name: \"file_variables:write\",\n description:\n \"Write to variables in Figma file. Note: this is only available to members in Enterprise organizations.\",\n rules: [\"POST /v1/files/{file_key}/variables\"],\n },\n {\n name: \"file_versions:read\",\n description: \"Read the version history for files you can access.\",\n rules: [\"GET /v1/files/{file_key}/versions\"],\n },\n {\n name: \"files:read\",\n description:\n \"Deprecated. Read files, projects, users, versions, comments, components & styles, and webhooks.\",\n rules: [\n \"GET /v1/component_sets/{key}\",\n \"GET /v1/components/{key}\",\n \"GET /v1/files/{file_key}\",\n \"GET /v1/files/{file_key}/comments\",\n \"GET /v1/files/{file_key}/comments/{comment_id}/reactions\",\n \"GET /v1/files/{file_key}/component_sets\",\n \"GET /v1/files/{file_key}/components\",\n \"GET /v1/files/{file_key}/images\",\n \"GET /v1/files/{file_key}/meta\",\n \"GET /v1/files/{file_key}/nodes\",\n \"GET /v1/files/{file_key}/styles\",\n \"GET /v1/files/{file_key}/versions\",\n \"GET /v1/images/{file_key}\",\n \"GET /v1/me\",\n \"GET /v1/projects/{project_id}/files\",\n \"GET /v1/styles/{key}\",\n \"GET /v1/teams/{team_id}/component_sets\",\n \"GET /v1/teams/{team_id}/components\",\n \"GET /v1/teams/{team_id}/projects\",\n \"GET /v1/teams/{team_id}/styles\",\n \"GET /v2/teams/{team_id}/webhooks\",\n \"GET /v2/webhooks/{webhook_id}\",\n \"GET /v2/webhooks/{webhook_id}/requests\",\n ],\n },\n {\n name: \"library_analytics:read\",\n description: \"Read library analytics data.\",\n rules: [\n \"GET /v1/analytics/libraries/{file_key}/component/actions\",\n \"GET /v1/analytics/libraries/{file_key}/component/usages\",\n \"GET /v1/analytics/libraries/{file_key}/style/actions\",\n \"GET /v1/analytics/libraries/{file_key}/style/usages\",\n \"GET /v1/analytics/libraries/{file_key}/variable/actions\",\n \"GET /v1/analytics/libraries/{file_key}/variable/usages\",\n ],\n },\n {\n name: \"library_assets:read\",\n description:\n \"Read data of individual published components and styles.\",\n rules: [\n \"GET /v1/component_sets/{key}\",\n \"GET /v1/components/{key}\",\n \"GET /v1/styles/{key}\",\n ],\n },\n {\n name: \"library_content:read\",\n description: \"Read published components and styles of files.\",\n rules: [\n \"GET /v1/files/{file_key}/component_sets\",\n \"GET /v1/files/{file_key}/components\",\n \"GET /v1/files/{file_key}/styles\",\n ],\n },\n {\n name: \"org:activity_log_read\",\n description: \"Read activity logs in the organization.\",\n rules: [\"GET /v1/activity_logs\"],\n },\n {\n name: \"projects:read\",\n description: \"List projects and files in projects.\",\n rules: [\n \"GET /v1/projects/{project_id}/files\",\n \"GET /v1/teams/{team_id}/projects\",\n ],\n },\n {\n name: \"team_library_content:read\",\n description: \"Read published components and styles of teams.\",\n rules: [\n \"GET /v1/teams/{team_id}/component_sets\",\n \"GET /v1/teams/{team_id}/components\",\n \"GET /v1/teams/{team_id}/styles\",\n ],\n },\n {\n name: \"webhooks:read\",\n description: \"Read metadata of webhooks.\",\n rules: [\n \"GET /v2/teams/{team_id}/webhooks\",\n \"GET /v2/webhooks\",\n \"GET /v2/webhooks/{webhook_id}\",\n \"GET /v2/webhooks/{webhook_id}/requests\",\n ],\n },\n {\n name: \"webhooks:write\",\n description: \"Create and manage webhooks.\",\n rules: [\n \"POST /v2/webhooks\",\n \"PUT /v2/webhooks/{webhook_id}\",\n \"DELETE /v2/webhooks/{webhook_id}\",\n ],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Firecrawl API docs.\n// Source: https://docs.firecrawl.dev/api-reference/introduction\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:firecrawl\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const firecrawlFirewall: FirewallConfig = {\n name: \"firecrawl\",\n description: \"Firecrawl API\",\n placeholders: {\n FIRECRAWL_TOKEN: \"fc-c0ffee5afe10ca1c0ffee5afe10ca1c0\",\n },\n apis: [\n {\n base: \"https://api.firecrawl.dev\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.FIRECRAWL_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Fireflies.ai API docs.\n// Source: https://docs.fireflies.ai/fundamentals/authorization\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:fireflies\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const firefliesFirewall: FirewallConfig = {\n name: \"fireflies\",\n description: \"Fireflies.ai API\",\n placeholders: {\n FIREFLIES_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalC\",\n },\n apis: [\n {\n base: \"https://api.fireflies.ai/graphql\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.FIREFLIES_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Gamma API docs.\n// Source: https://developers.gamma.app\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:gamma\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const gammaFirewall: FirewallConfig = {\n name: \"gamma\",\n description: \"Gamma API\",\n placeholders: {\n GAMMA_TOKEN: \"sk-gamma-CoffeeSafeLocalCoffeeSafeLo\",\n },\n apis: [\n {\n base: \"https://public-api.gamma.app\",\n auth: {\n headers: {\n \"X-API-KEY\": \"${{ secrets.GAMMA_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Garmin Connect API docs.\n// Source: https://developer.garmin.com/gc-developer-program/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:garmin-connect\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const garminConnectFirewall: FirewallConfig = {\n name: \"garmin-connect\",\n description: \"Garmin Connect API\",\n placeholders: {\n GARMIN_CONNECT_TOKEN:\n \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafe\",\n },\n apis: [\n {\n base: \"https://apis.garmin.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.GARMIN_CONNECT_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from GitHub's official permissions data.\n// Source: github/docs/src/github-apps/data/fpt-2026-03-10/server-to-server-permissions.json\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:github\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const githubFirewall: FirewallConfig = {\n name: \"github\",\n description: \"GitHub API\",\n placeholders: {\n GITHUB_TOKEN: \"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\",\n GH_TOKEN: \"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\",\n },\n apis: [\n {\n base: \"https://api.github.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.GITHUB_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"enterprise_copilot_metrics:read\",\n description: \"Enterprise Copilot metrics\",\n rules: [\n \"GET /enterprises/{enterprise}/copilot/metrics/reports/enterprise-1-day\",\n \"GET /enterprises/{enterprise}/copilot/metrics/reports/enterprise-28-day/latest\",\n \"GET /enterprises/{enterprise}/copilot/metrics/reports/users-1-day\",\n \"GET /enterprises/{enterprise}/copilot/metrics/reports/users-28-day/latest\",\n ],\n },\n {\n name: \"enterprise_teams:read\",\n description: \"Enterprise teams\",\n rules: [\n \"GET /enterprises/{enterprise}/teams\",\n \"GET /enterprises/{enterprise}/teams/{enterprise-team}/memberships\",\n \"GET /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}\",\n \"GET /enterprises/{enterprise}/teams/{enterprise-team}/organizations\",\n \"GET /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}\",\n \"GET /enterprises/{enterprise}/teams/{team_slug}\",\n ],\n },\n {\n name: \"enterprise_teams:write\",\n description: \"Enterprise teams\",\n rules: [\n \"POST /enterprises/{enterprise}/teams\",\n \"POST /enterprises/{enterprise}/teams/{enterprise-team}/memberships/add\",\n \"POST /enterprises/{enterprise}/teams/{enterprise-team}/memberships/remove\",\n \"PUT /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}\",\n \"DELETE /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}\",\n \"POST /enterprises/{enterprise}/teams/{enterprise-team}/organizations/add\",\n \"POST /enterprises/{enterprise}/teams/{enterprise-team}/organizations/remove\",\n \"PUT /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}\",\n \"DELETE /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}\",\n \"PATCH /enterprises/{enterprise}/teams/{team_slug}\",\n \"DELETE /enterprises/{enterprise}/teams/{team_slug}\",\n ],\n },\n {\n name: \"organization_api_insights:read\",\n description: \"API Insights\",\n rules: [\n \"GET /orgs/{org}/insights/api/route-stats/{actor_type}/{actor_id}\",\n \"GET /orgs/{org}/insights/api/subject-stats\",\n \"GET /orgs/{org}/insights/api/summary-stats\",\n \"GET /orgs/{org}/insights/api/summary-stats/users/{user_id}\",\n \"GET /orgs/{org}/insights/api/summary-stats/{actor_type}/{actor_id}\",\n \"GET /orgs/{org}/insights/api/time-stats\",\n \"GET /orgs/{org}/insights/api/time-stats/users/{user_id}\",\n \"GET /orgs/{org}/insights/api/time-stats/{actor_type}/{actor_id}\",\n \"GET /orgs/{org}/insights/api/user-stats/{user_id}\",\n ],\n },\n {\n name: \"organization_administration:read\",\n description: \"Administration\",\n rules: [\n \"GET /organizations/{org}/actions/cache/retention-limit\",\n \"GET /organizations/{org}/actions/cache/storage-limit\",\n \"GET /organizations/{org}/dependabot/repository-access\",\n \"GET /organizations/{org}/settings/billing/budgets\",\n \"GET /organizations/{org}/settings/billing/budgets/{budget_id}\",\n \"GET /organizations/{org}/settings/billing/premium_request/usage\",\n \"GET /organizations/{org}/settings/billing/usage\",\n \"GET /organizations/{org}/settings/billing/usage/summary\",\n \"GET /orgs/{org}/actions/cache/usage\",\n \"GET /orgs/{org}/actions/cache/usage-by-repository\",\n \"GET /orgs/{org}/actions/hosted-runners\",\n \"GET /orgs/{org}/actions/hosted-runners/images/github-owned\",\n \"GET /orgs/{org}/actions/hosted-runners/images/partner\",\n \"GET /orgs/{org}/actions/hosted-runners/limits\",\n \"GET /orgs/{org}/actions/hosted-runners/machine-sizes\",\n \"GET /orgs/{org}/actions/hosted-runners/platforms\",\n \"GET /orgs/{org}/actions/hosted-runners/{hosted_runner_id}\",\n \"GET /orgs/{org}/actions/oidc/customization/properties/repo\",\n \"GET /orgs/{org}/actions/oidc/customization/sub\",\n \"GET /orgs/{org}/actions/permissions\",\n \"GET /orgs/{org}/actions/permissions/artifact-and-log-retention\",\n \"GET /orgs/{org}/actions/permissions/fork-pr-contributor-approval\",\n \"GET /orgs/{org}/actions/permissions/fork-pr-workflows-private-repos\",\n \"GET /orgs/{org}/actions/permissions/repositories\",\n \"GET /orgs/{org}/actions/permissions/selected-actions\",\n \"GET /orgs/{org}/actions/permissions/self-hosted-runners\",\n \"GET /orgs/{org}/actions/permissions/self-hosted-runners/repositories\",\n \"GET /orgs/{org}/actions/permissions/workflow\",\n \"GET /orgs/{org}/code-security/configurations\",\n \"GET /orgs/{org}/code-security/configurations/defaults\",\n \"GET /orgs/{org}/code-security/configurations/{configuration_id}\",\n \"GET /orgs/{org}/code-security/configurations/{configuration_id}/repositories\",\n \"GET /orgs/{org}/copilot/billing\",\n \"GET /orgs/{org}/copilot/billing/seats\",\n \"GET /orgs/{org}/copilot/metrics\",\n \"GET /orgs/{org}/installations\",\n \"GET /orgs/{org}/interaction-limits\",\n \"GET /orgs/{org}/members/{username}/copilot\",\n \"GET /orgs/{org}/secret-scanning/pattern-configurations\",\n \"GET /orgs/{org}/security-managers\",\n \"GET /orgs/{org}/settings/immutable-releases\",\n \"GET /orgs/{org}/settings/immutable-releases/repositories\",\n \"GET /orgs/{org}/team/{team_slug}/copilot/metrics\",\n ],\n },\n {\n name: \"organization_administration:write\",\n description: \"Administration\",\n rules: [\n \"PUT /organizations/{org}/actions/cache/retention-limit\",\n \"PUT /organizations/{org}/actions/cache/storage-limit\",\n \"PATCH /organizations/{org}/dependabot/repository-access\",\n \"PUT /organizations/{org}/dependabot/repository-access/default-level\",\n \"PATCH /organizations/{org}/settings/billing/budgets/{budget_id}\",\n \"DELETE /organizations/{org}/settings/billing/budgets/{budget_id}\",\n \"PATCH /orgs/{org}\",\n \"DELETE /orgs/{org}\",\n \"POST /orgs/{org}/actions/hosted-runners\",\n \"PATCH /orgs/{org}/actions/hosted-runners/{hosted_runner_id}\",\n \"DELETE /orgs/{org}/actions/hosted-runners/{hosted_runner_id}\",\n \"POST /orgs/{org}/actions/oidc/customization/properties/repo\",\n \"DELETE /orgs/{org}/actions/oidc/customization/properties/repo/{custom_property_name}\",\n \"PUT /orgs/{org}/actions/oidc/customization/sub\",\n \"PUT /orgs/{org}/actions/permissions\",\n \"PUT /orgs/{org}/actions/permissions/artifact-and-log-retention\",\n \"PUT /orgs/{org}/actions/permissions/fork-pr-contributor-approval\",\n \"PUT /orgs/{org}/actions/permissions/fork-pr-workflows-private-repos\",\n \"PUT /orgs/{org}/actions/permissions/repositories\",\n \"PUT /orgs/{org}/actions/permissions/repositories/{repository_id}\",\n \"DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}\",\n \"PUT /orgs/{org}/actions/permissions/selected-actions\",\n \"PUT /orgs/{org}/actions/permissions/self-hosted-runners\",\n \"PUT /orgs/{org}/actions/permissions/self-hosted-runners/repositories\",\n \"PUT /orgs/{org}/actions/permissions/self-hosted-runners/repositories/{repository_id}\",\n \"DELETE /orgs/{org}/actions/permissions/self-hosted-runners/repositories/{repository_id}\",\n \"PUT /orgs/{org}/actions/permissions/workflow\",\n \"POST /orgs/{org}/code-security/configurations\",\n \"DELETE /orgs/{org}/code-security/configurations/detach\",\n \"PATCH /orgs/{org}/code-security/configurations/{configuration_id}\",\n \"DELETE /orgs/{org}/code-security/configurations/{configuration_id}\",\n \"POST /orgs/{org}/code-security/configurations/{configuration_id}/attach\",\n \"PUT /orgs/{org}/code-security/configurations/{configuration_id}/defaults\",\n \"POST /orgs/{org}/copilot/billing/selected_teams\",\n \"DELETE /orgs/{org}/copilot/billing/selected_teams\",\n \"POST /orgs/{org}/copilot/billing/selected_users\",\n \"DELETE /orgs/{org}/copilot/billing/selected_users\",\n \"PUT /orgs/{org}/interaction-limits\",\n \"DELETE /orgs/{org}/interaction-limits\",\n \"GET /orgs/{org}/rulesets\",\n \"POST /orgs/{org}/rulesets\",\n \"GET /orgs/{org}/rulesets/rule-suites\",\n \"GET /orgs/{org}/rulesets/rule-suites/{rule_suite_id}\",\n \"GET /orgs/{org}/rulesets/{ruleset_id}\",\n \"PUT /orgs/{org}/rulesets/{ruleset_id}\",\n \"DELETE /orgs/{org}/rulesets/{ruleset_id}\",\n \"GET /orgs/{org}/rulesets/{ruleset_id}/history\",\n \"GET /orgs/{org}/rulesets/{ruleset_id}/history/{version_id}\",\n \"PATCH /orgs/{org}/secret-scanning/pattern-configurations\",\n \"PUT /orgs/{org}/security-managers/teams/{team_slug}\",\n \"DELETE /orgs/{org}/security-managers/teams/{team_slug}\",\n \"PUT /orgs/{org}/settings/immutable-releases\",\n \"PUT /orgs/{org}/settings/immutable-releases/repositories\",\n \"PUT /orgs/{org}/settings/immutable-releases/repositories/{repository_id}\",\n \"DELETE /orgs/{org}/settings/immutable-releases/repositories/{repository_id}\",\n \"POST /orgs/{org}/{security_product}/{enablement}\",\n ],\n },\n {\n name: \"organization_user_blocking:read\",\n description: \"Blocking users\",\n rules: [\n \"GET /orgs/{org}/blocks\",\n \"GET /orgs/{org}/blocks/{username}\",\n ],\n },\n {\n name: \"organization_user_blocking:write\",\n description: \"Blocking users\",\n rules: [\n \"PUT /orgs/{org}/blocks/{username}\",\n \"DELETE /orgs/{org}/blocks/{username}\",\n ],\n },\n {\n name: \"organization_campaigns:read\",\n description: \"Campaigns\",\n rules: [\n \"GET /orgs/{org}/campaigns\",\n \"GET /orgs/{org}/campaigns/{campaign_number}\",\n ],\n },\n {\n name: \"organization_campaigns:write\",\n description: \"Campaigns\",\n rules: [\n \"POST /orgs/{org}/campaigns\",\n \"PATCH /orgs/{org}/campaigns/{campaign_number}\",\n \"DELETE /orgs/{org}/campaigns/{campaign_number}\",\n ],\n },\n {\n name: \"organization_copilot_agent_settings:read\",\n description: \"Copilot agent settings\",\n rules: [\n \"GET /orgs/{org}/copilot/coding-agent/permissions\",\n \"GET /orgs/{org}/copilot/coding-agent/permissions/repositories\",\n ],\n },\n {\n name: \"organization_copilot_agent_settings:write\",\n description: \"Copilot agent settings\",\n rules: [\n \"PUT /orgs/{org}/copilot/coding-agent/permissions\",\n \"PUT /orgs/{org}/copilot/coding-agent/permissions/repositories\",\n \"PUT /orgs/{org}/copilot/coding-agent/permissions/repositories/{repository_id}\",\n \"DELETE /orgs/{org}/copilot/coding-agent/permissions/repositories/{repository_id}\",\n ],\n },\n {\n name: \"org_copilot_content_exclusion:read\",\n description: \"Copilot content exclusion\",\n rules: [\"GET /orgs/{org}/copilot/content_exclusion\"],\n },\n {\n name: \"org_copilot_content_exclusion:write\",\n description: \"Copilot content exclusion\",\n rules: [\"PUT /orgs/{org}/copilot/content_exclusion\"],\n },\n {\n name: \"organization_custom_org_roles:read\",\n description: \"Custom organization roles\",\n rules: [\n \"GET /orgs/{org}/organization-roles\",\n \"GET /orgs/{org}/organization-roles/{role_id}\",\n ],\n },\n {\n name: \"organization_custom_properties:read\",\n description: \"Custom properties\",\n rules: [\n \"GET /orgs/{org}/properties/schema\",\n \"GET /orgs/{org}/properties/schema/{custom_property_name}\",\n \"GET /orgs/{org}/properties/values\",\n ],\n },\n {\n name: \"organization_custom_properties:admin\",\n description: \"Custom properties\",\n rules: [\n \"PATCH /orgs/{org}/properties/schema\",\n \"PUT /orgs/{org}/properties/schema/{custom_property_name}\",\n \"DELETE /orgs/{org}/properties/schema/{custom_property_name}\",\n ],\n },\n {\n name: \"organization_custom_properties:write\",\n description: \"Custom properties\",\n rules: [\"PATCH /orgs/{org}/properties/values\"],\n },\n {\n name: \"organization_events:read\",\n description: \"Events\",\n rules: [\"GET /users/{username}/events/orgs/{org}\"],\n },\n {\n name: \"organization_copilot_seat_management:read\",\n description: \"GitHub Copilot Business\",\n rules: [\n \"GET /orgs/{org}/copilot/billing\",\n \"GET /orgs/{org}/copilot/billing/seats\",\n \"GET /orgs/{org}/copilot/metrics\",\n \"GET /orgs/{org}/members/{username}/copilot\",\n \"GET /orgs/{org}/team/{team_slug}/copilot/metrics\",\n ],\n },\n {\n name: \"organization_copilot_seat_management:write\",\n description: \"GitHub Copilot Business\",\n rules: [\n \"POST /orgs/{org}/copilot/billing/selected_teams\",\n \"DELETE /orgs/{org}/copilot/billing/selected_teams\",\n \"POST /orgs/{org}/copilot/billing/selected_users\",\n \"DELETE /orgs/{org}/copilot/billing/selected_users\",\n ],\n },\n {\n name: \"organization_runner_custom_images:read\",\n description: \"Hosted runner custom images\",\n rules: [\n \"GET /orgs/{org}/actions/hosted-runners/images/custom\",\n \"GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}\",\n \"GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions\",\n \"GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions/{version}\",\n ],\n },\n {\n name: \"organization_runner_custom_images:write\",\n description: \"Hosted runner custom images\",\n rules: [\n \"DELETE /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}\",\n \"DELETE /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions/{version}\",\n ],\n },\n {\n name: \"issue_fields:read\",\n description: \"Issue Fields\",\n rules: [\"GET /orgs/{org}/issue-fields\"],\n },\n {\n name: \"issue_fields:write\",\n description: \"Issue Fields\",\n rules: [\n \"POST /orgs/{org}/issue-fields\",\n \"PATCH /orgs/{org}/issue-fields/{issue_field_id}\",\n \"DELETE /orgs/{org}/issue-fields/{issue_field_id}\",\n ],\n },\n {\n name: \"issue_types:read\",\n description: \"Issue Types\",\n rules: [\"GET /orgs/{org}/issue-types\"],\n },\n {\n name: \"issue_types:write\",\n description: \"Issue Types\",\n rules: [\n \"POST /orgs/{org}/issue-types\",\n \"PUT /orgs/{org}/issue-types/{issue_type_id}\",\n \"DELETE /orgs/{org}/issue-types/{issue_type_id}\",\n ],\n },\n {\n name: \"members:read\",\n description: \"Members\",\n rules: [\n \"GET /orgs/{org}/failed_invitations\",\n \"GET /orgs/{org}/invitations\",\n \"GET /orgs/{org}/invitations/{invitation_id}/teams\",\n \"GET /orgs/{org}/members\",\n \"GET /orgs/{org}/members/{username}\",\n \"GET /orgs/{org}/memberships/{username}\",\n \"GET /orgs/{org}/organization-roles/{role_id}/teams\",\n \"GET /orgs/{org}/organization-roles/{role_id}/users\",\n \"GET /orgs/{org}/outside_collaborators\",\n \"GET /orgs/{org}/public_members\",\n \"GET /orgs/{org}/public_members/{username}\",\n \"GET /orgs/{org}/teams\",\n \"GET /orgs/{org}/teams/{team_slug}\",\n \"GET /orgs/{org}/teams/{team_slug}/invitations\",\n \"GET /orgs/{org}/teams/{team_slug}/members\",\n \"GET /orgs/{org}/teams/{team_slug}/memberships/{username}\",\n \"GET /orgs/{org}/teams/{team_slug}/repos\",\n \"GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}\",\n \"PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}\",\n \"DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}\",\n \"GET /orgs/{org}/teams/{team_slug}/teams\",\n \"GET /teams/{team_id}\",\n \"GET /teams/{team_id}/invitations\",\n \"GET /teams/{team_id}/members\",\n \"GET /teams/{team_id}/members/{username}\",\n \"GET /teams/{team_id}/memberships/{username}\",\n \"GET /teams/{team_id}/repos\",\n \"GET /teams/{team_id}/repos/{owner}/{repo}\",\n \"PUT /teams/{team_id}/repos/{owner}/{repo}\",\n \"DELETE /teams/{team_id}/repos/{owner}/{repo}\",\n \"GET /teams/{team_id}/teams\",\n \"GET /user/memberships/orgs/{org}\",\n ],\n },\n {\n name: \"members:write\",\n description: \"Members\",\n rules: [\n \"POST /orgs/{org}/invitations\",\n \"DELETE /orgs/{org}/invitations/{invitation_id}\",\n \"DELETE /orgs/{org}/members/{username}\",\n \"PUT /orgs/{org}/memberships/{username}\",\n \"DELETE /orgs/{org}/memberships/{username}\",\n \"DELETE /orgs/{org}/organization-roles/teams/{team_slug}\",\n \"PUT /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}\",\n \"DELETE /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}\",\n \"DELETE /orgs/{org}/organization-roles/users/{username}\",\n \"PUT /orgs/{org}/organization-roles/users/{username}/{role_id}\",\n \"DELETE /orgs/{org}/organization-roles/users/{username}/{role_id}\",\n \"PUT /orgs/{org}/outside_collaborators/{username}\",\n \"DELETE /orgs/{org}/outside_collaborators/{username}\",\n \"PUT /orgs/{org}/public_members/{username}\",\n \"DELETE /orgs/{org}/public_members/{username}\",\n \"POST /orgs/{org}/teams\",\n \"PATCH /orgs/{org}/teams/{team_slug}\",\n \"DELETE /orgs/{org}/teams/{team_slug}\",\n \"PUT /orgs/{org}/teams/{team_slug}/memberships/{username}\",\n \"DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}\",\n \"PATCH /teams/{team_id}\",\n \"DELETE /teams/{team_id}\",\n \"PUT /teams/{team_id}/members/{username}\",\n \"DELETE /teams/{team_id}/members/{username}\",\n \"PUT /teams/{team_id}/memberships/{username}\",\n \"DELETE /teams/{team_id}/memberships/{username}\",\n \"PATCH /user/memberships/orgs/{org}\",\n ],\n },\n {\n name: \"organization_network_configurations:read\",\n description: \"Network configurations\",\n rules: [\n \"GET /orgs/{org}/settings/network-configurations\",\n \"GET /orgs/{org}/settings/network-configurations/{network_configuration_id}\",\n \"GET /orgs/{org}/settings/network-settings/{network_settings_id}\",\n ],\n },\n {\n name: \"organization_network_configurations:write\",\n description: \"Network configurations\",\n rules: [\n \"POST /orgs/{org}/settings/network-configurations\",\n \"PATCH /orgs/{org}/settings/network-configurations/{network_configuration_id}\",\n \"DELETE /orgs/{org}/settings/network-configurations/{network_configuration_id}\",\n ],\n },\n {\n name: \"organization_copilot_metrics:read\",\n description: \"Organization Copilot metrics\",\n rules: [\n \"GET /orgs/{org}/copilot/metrics/reports/organization-1-day\",\n \"GET /orgs/{org}/copilot/metrics/reports/organization-28-day/latest\",\n \"GET /orgs/{org}/copilot/metrics/reports/users-1-day\",\n \"GET /orgs/{org}/copilot/metrics/reports/users-28-day/latest\",\n ],\n },\n {\n name: \"organization_codespaces_secrets:read\",\n description: \"Organization codespaces secrets\",\n rules: [\n \"GET /orgs/{org}/codespaces/secrets\",\n \"GET /orgs/{org}/codespaces/secrets/public-key\",\n \"GET /orgs/{org}/codespaces/secrets/{secret_name}\",\n \"GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories\",\n ],\n },\n {\n name: \"organization_codespaces_secrets:write\",\n description: \"Organization codespaces secrets\",\n rules: [\n \"PUT /orgs/{org}/codespaces/secrets/{secret_name}\",\n \"DELETE /orgs/{org}/codespaces/secrets/{secret_name}\",\n \"PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories\",\n \"PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}\",\n \"DELETE /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}\",\n ],\n },\n {\n name: \"organization_codespaces_settings:write\",\n description: \"Organization codespaces settings\",\n rules: [\n \"PUT /orgs/{org}/codespaces/access\",\n \"POST /orgs/{org}/codespaces/access/selected_users\",\n \"DELETE /orgs/{org}/codespaces/access/selected_users\",\n ],\n },\n {\n name: \"organization_codespaces:read\",\n description: \"Organization codespaces\",\n rules: [\n \"GET /orgs/{org}/codespaces\",\n \"GET /orgs/{org}/members/{username}/codespaces\",\n ],\n },\n {\n name: \"organization_codespaces:write\",\n description: \"Organization codespaces\",\n rules: [\n \"DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}\",\n \"POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop\",\n ],\n },\n {\n name: \"organization_dependabot_secrets:read\",\n description: \"Organization dependabot secrets\",\n rules: [\n \"GET /orgs/{org}/dependabot/secrets\",\n \"GET /orgs/{org}/dependabot/secrets/public-key\",\n \"GET /orgs/{org}/dependabot/secrets/{secret_name}\",\n \"GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories\",\n ],\n },\n {\n name: \"organization_dependabot_secrets:write\",\n description: \"Organization dependabot secrets\",\n rules: [\n \"PUT /orgs/{org}/dependabot/secrets/{secret_name}\",\n \"DELETE /orgs/{org}/dependabot/secrets/{secret_name}\",\n \"PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories\",\n \"PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}\",\n \"DELETE /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}\",\n ],\n },\n {\n name: \"organization_private_registries:read\",\n description: \"Organization private registries\",\n rules: [\n \"GET /orgs/{org}/private-registries\",\n \"GET /orgs/{org}/private-registries/public-key\",\n \"GET /orgs/{org}/private-registries/{secret_name}\",\n ],\n },\n {\n name: \"organization_private_registries:write\",\n description: \"Organization private registries\",\n rules: [\n \"POST /orgs/{org}/private-registries\",\n \"PATCH /orgs/{org}/private-registries/{secret_name}\",\n \"DELETE /orgs/{org}/private-registries/{secret_name}\",\n ],\n },\n {\n name: \"organization_personal_access_token_requests:read\",\n description: \"Personal access token requests\",\n rules: [\n \"GET /orgs/{org}/personal-access-token-requests\",\n \"GET /orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories\",\n ],\n },\n {\n name: \"organization_personal_access_token_requests:write\",\n description: \"Personal access token requests\",\n rules: [\n \"POST /orgs/{org}/personal-access-token-requests\",\n \"POST /orgs/{org}/personal-access-token-requests/{pat_request_id}\",\n ],\n },\n {\n name: \"organization_personal_access_tokens:read\",\n description: \"Personal access tokens\",\n rules: [\n \"GET /orgs/{org}/personal-access-tokens\",\n \"GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories\",\n ],\n },\n {\n name: \"organization_personal_access_tokens:write\",\n description: \"Personal access tokens\",\n rules: [\n \"POST /orgs/{org}/personal-access-tokens\",\n \"POST /orgs/{org}/personal-access-tokens/{pat_id}\",\n ],\n },\n {\n name: \"organization_projects:read\",\n description: \"Projects\",\n rules: [\n \"GET /orgs/{org}/projectsV2\",\n \"GET /orgs/{org}/projectsV2/{project_number}\",\n \"GET /orgs/{org}/projectsV2/{project_number}/fields\",\n \"GET /orgs/{org}/projectsV2/{project_number}/fields/{field_id}\",\n \"GET /orgs/{org}/projectsV2/{project_number}/items\",\n \"GET /orgs/{org}/projectsV2/{project_number}/items/{item_id}\",\n \"GET /orgs/{org}/projectsV2/{project_number}/views/{view_number}/items\",\n ],\n },\n {\n name: \"organization_projects:write\",\n description: \"Projects\",\n rules: [\n \"POST /orgs/{org}/projectsV2/{project_number}/drafts\",\n \"POST /orgs/{org}/projectsV2/{project_number}/fields\",\n \"POST /orgs/{org}/projectsV2/{project_number}/items\",\n \"PATCH /orgs/{org}/projectsV2/{project_number}/items/{item_id}\",\n \"DELETE /orgs/{org}/projectsV2/{project_number}/items/{item_id}\",\n \"POST /orgs/{org}/projectsV2/{project_number}/views\",\n ],\n },\n {\n name: \"organization_secrets:read\",\n description: \"Secrets\",\n rules: [\n \"GET /orgs/{org}/actions/secrets\",\n \"GET /orgs/{org}/actions/secrets/public-key\",\n \"GET /orgs/{org}/actions/secrets/{secret_name}\",\n \"GET /orgs/{org}/actions/secrets/{secret_name}/repositories\",\n ],\n },\n {\n name: \"organization_secrets:write\",\n description: \"Secrets\",\n rules: [\n \"PUT /orgs/{org}/actions/secrets/{secret_name}\",\n \"DELETE /orgs/{org}/actions/secrets/{secret_name}\",\n \"PUT /orgs/{org}/actions/secrets/{secret_name}/repositories\",\n \"PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}\",\n \"DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}\",\n ],\n },\n {\n name: \"organization_self_hosted_runners:read\",\n description: \"Self-hosted runners\",\n rules: [\n \"GET /orgs/{org}/actions/runner-groups\",\n \"GET /orgs/{org}/actions/runner-groups/{runner_group_id}\",\n \"GET /orgs/{org}/actions/runner-groups/{runner_group_id}/hosted-runners\",\n \"GET /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories\",\n \"GET /orgs/{org}/actions/runner-groups/{runner_group_id}/runners\",\n \"GET /orgs/{org}/actions/runners\",\n \"GET /orgs/{org}/actions/runners/downloads\",\n \"GET /orgs/{org}/actions/runners/{runner_id}\",\n \"GET /orgs/{org}/actions/runners/{runner_id}/labels\",\n ],\n },\n {\n name: \"organization_self_hosted_runners:write\",\n description: \"Self-hosted runners\",\n rules: [\n \"POST /orgs/{org}/actions/runner-groups\",\n \"PATCH /orgs/{org}/actions/runner-groups/{runner_group_id}\",\n \"DELETE /orgs/{org}/actions/runner-groups/{runner_group_id}\",\n \"PUT /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories\",\n \"PUT /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories/{repository_id}\",\n \"DELETE /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories/{repository_id}\",\n \"PUT /orgs/{org}/actions/runner-groups/{runner_group_id}/runners\",\n \"PUT /orgs/{org}/actions/runner-groups/{runner_group_id}/runners/{runner_id}\",\n \"DELETE /orgs/{org}/actions/runner-groups/{runner_group_id}/runners/{runner_id}\",\n \"POST /orgs/{org}/actions/runners/generate-jitconfig\",\n \"POST /orgs/{org}/actions/runners/registration-token\",\n \"POST /orgs/{org}/actions/runners/remove-token\",\n \"DELETE /orgs/{org}/actions/runners/{runner_id}\",\n \"POST /orgs/{org}/actions/runners/{runner_id}/labels\",\n \"PUT /orgs/{org}/actions/runners/{runner_id}/labels\",\n \"DELETE /orgs/{org}/actions/runners/{runner_id}/labels\",\n \"DELETE /orgs/{org}/actions/runners/{runner_id}/labels/{name}\",\n ],\n },\n {\n name: \"organization_actions_variables:read\",\n description: \"Variables\",\n rules: [\n \"GET /orgs/{org}/actions/variables\",\n \"GET /orgs/{org}/actions/variables/{name}\",\n \"GET /orgs/{org}/actions/variables/{name}/repositories\",\n ],\n },\n {\n name: \"organization_actions_variables:write\",\n description: \"Variables\",\n rules: [\n \"POST /orgs/{org}/actions/variables\",\n \"PATCH /orgs/{org}/actions/variables/{name}\",\n \"DELETE /orgs/{org}/actions/variables/{name}\",\n \"PUT /orgs/{org}/actions/variables/{name}/repositories\",\n \"PUT /orgs/{org}/actions/variables/{name}/repositories/{repository_id}\",\n \"DELETE /orgs/{org}/actions/variables/{name}/repositories/{repository_id}\",\n ],\n },\n {\n name: \"organization_hooks:read\",\n description: \"Webhooks\",\n rules: [\n \"GET /orgs/{org}/hooks\",\n \"GET /orgs/{org}/hooks/{hook_id}\",\n \"GET /orgs/{org}/hooks/{hook_id}/config\",\n \"GET /orgs/{org}/hooks/{hook_id}/deliveries\",\n \"GET /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}\",\n ],\n },\n {\n name: \"organization_hooks:write\",\n description: \"Webhooks\",\n rules: [\n \"POST /orgs/{org}/hooks\",\n \"PATCH /orgs/{org}/hooks/{hook_id}\",\n \"DELETE /orgs/{org}/hooks/{hook_id}\",\n \"PATCH /orgs/{org}/hooks/{hook_id}/config\",\n \"POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts\",\n \"POST /orgs/{org}/hooks/{hook_id}/pings\",\n ],\n },\n {\n name: \"actions:read\",\n description: \"Actions\",\n rules: [\n \"GET /repos/{owner}/{repo}/actions/artifacts\",\n \"GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}\",\n \"GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}\",\n \"GET /repos/{owner}/{repo}/actions/cache/storage-limit\",\n \"GET /repos/{owner}/{repo}/actions/cache/usage\",\n \"GET /repos/{owner}/{repo}/actions/caches\",\n \"GET /repos/{owner}/{repo}/actions/jobs/{job_id}\",\n \"GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs\",\n \"GET /repos/{owner}/{repo}/actions/oidc/customization/sub\",\n \"GET /repos/{owner}/{repo}/actions/runs\",\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}\",\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/approvals\",\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts\",\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}\",\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs\",\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs\",\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs\",\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs\",\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments\",\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing\",\n \"GET /repos/{owner}/{repo}/actions/workflows\",\n \"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}\",\n \"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs\",\n \"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing\",\n \"GET /repos/{owner}/{repo}/environments\",\n \"GET /repos/{owner}/{repo}/environments/{environment_name}\",\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies\",\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}\",\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules\",\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}\",\n ],\n },\n {\n name: \"actions:write\",\n description: \"Actions\",\n rules: [\n \"DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}\",\n \"DELETE /repos/{owner}/{repo}/actions/caches\",\n \"DELETE /repos/{owner}/{repo}/actions/caches/{cache_id}\",\n \"POST /repos/{owner}/{repo}/actions/jobs/{job_id}/rerun\",\n \"PUT /repos/{owner}/{repo}/actions/oidc/customization/sub\",\n \"DELETE /repos/{owner}/{repo}/actions/runs/{run_id}\",\n \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/approve\",\n \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel\",\n \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/force-cancel\",\n \"DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs\",\n \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun\",\n \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun-failed-jobs\",\n \"PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable\",\n \"POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches\",\n \"PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable\",\n ],\n },\n {\n name: \"administration:write\",\n description: \"Administration\",\n rules: [\n \"POST /orgs/{org}/repos\",\n \"PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}\",\n \"DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}\",\n \"PATCH /repos/{owner}/{repo}\",\n \"DELETE /repos/{owner}/{repo}\",\n \"PUT /repos/{owner}/{repo}/actions/cache/retention-limit\",\n \"PUT /repos/{owner}/{repo}/actions/cache/storage-limit\",\n \"PUT /repos/{owner}/{repo}/actions/permissions\",\n \"PUT /repos/{owner}/{repo}/actions/permissions/access\",\n \"PUT /repos/{owner}/{repo}/actions/permissions/artifact-and-log-retention\",\n \"PUT /repos/{owner}/{repo}/actions/permissions/fork-pr-contributor-approval\",\n \"PUT /repos/{owner}/{repo}/actions/permissions/fork-pr-workflows-private-repos\",\n \"PUT /repos/{owner}/{repo}/actions/permissions/selected-actions\",\n \"PUT /repos/{owner}/{repo}/actions/permissions/workflow\",\n \"POST /repos/{owner}/{repo}/actions/runners/generate-jitconfig\",\n \"POST /repos/{owner}/{repo}/actions/runners/registration-token\",\n \"POST /repos/{owner}/{repo}/actions/runners/remove-token\",\n \"DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}\",\n \"POST /repos/{owner}/{repo}/actions/runners/{runner_id}/labels\",\n \"PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels\",\n \"DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels\",\n \"DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels/{name}\",\n \"POST /repos/{owner}/{repo}/autolinks\",\n \"DELETE /repos/{owner}/{repo}/autolinks/{autolink_id}\",\n \"PUT /repos/{owner}/{repo}/automated-security-fixes\",\n \"DELETE /repos/{owner}/{repo}/automated-security-fixes\",\n \"PUT /repos/{owner}/{repo}/branches/{branch}/protection\",\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection\",\n \"POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins\",\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins\",\n \"PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews\",\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews\",\n \"POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures\",\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures\",\n \"PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks\",\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks\",\n \"POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts\",\n \"PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts\",\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts\",\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions\",\n \"POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps\",\n \"PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps\",\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps\",\n \"POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams\",\n \"PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams\",\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams\",\n \"POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users\",\n \"PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users\",\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users\",\n \"PATCH /repos/{owner}/{repo}/code-scanning/default-setup\",\n \"PUT /repos/{owner}/{repo}/collaborators/{username}\",\n \"DELETE /repos/{owner}/{repo}/collaborators/{username}\",\n \"PUT /repos/{owner}/{repo}/environments/{environment_name}\",\n \"DELETE /repos/{owner}/{repo}/environments/{environment_name}\",\n \"POST /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies\",\n \"PUT /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}\",\n \"DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}\",\n \"POST /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules\",\n \"DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}\",\n \"POST /repos/{owner}/{repo}/forks\",\n \"PUT /repos/{owner}/{repo}/immutable-releases\",\n \"DELETE /repos/{owner}/{repo}/immutable-releases\",\n \"PUT /repos/{owner}/{repo}/interaction-limits\",\n \"DELETE /repos/{owner}/{repo}/interaction-limits\",\n \"PATCH /repos/{owner}/{repo}/invitations/{invitation_id}\",\n \"DELETE /repos/{owner}/{repo}/invitations/{invitation_id}\",\n \"POST /repos/{owner}/{repo}/keys\",\n \"DELETE /repos/{owner}/{repo}/keys/{key_id}\",\n \"POST /repos/{owner}/{repo}/pages\",\n \"PUT /repos/{owner}/{repo}/pages\",\n \"DELETE /repos/{owner}/{repo}/pages\",\n \"GET /repos/{owner}/{repo}/pages/health\",\n \"PUT /repos/{owner}/{repo}/private-vulnerability-reporting\",\n \"DELETE /repos/{owner}/{repo}/private-vulnerability-reporting\",\n \"POST /repos/{owner}/{repo}/rulesets\",\n \"PUT /repos/{owner}/{repo}/rulesets/{ruleset_id}\",\n \"DELETE /repos/{owner}/{repo}/rulesets/{ruleset_id}\",\n \"GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history\",\n \"GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history/{version_id}\",\n \"POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/forks\",\n \"PUT /repos/{owner}/{repo}/topics\",\n \"POST /repos/{owner}/{repo}/transfer\",\n \"PUT /repos/{owner}/{repo}/vulnerability-alerts\",\n \"DELETE /repos/{owner}/{repo}/vulnerability-alerts\",\n \"POST /repos/{template_owner}/{template_repo}/generate\",\n \"PUT /teams/{team_id}/repos/{owner}/{repo}\",\n \"DELETE /teams/{team_id}/repos/{owner}/{repo}\",\n \"POST /user/repos\",\n \"PATCH /user/repository_invitations/{invitation_id}\",\n \"DELETE /user/repository_invitations/{invitation_id}\",\n ],\n },\n {\n name: \"administration:read\",\n description: \"Administration\",\n rules: [\n \"GET /repos/{owner}/{repo}/actions/cache/retention-limit\",\n \"GET /repos/{owner}/{repo}/actions/permissions\",\n \"GET /repos/{owner}/{repo}/actions/permissions/access\",\n \"GET /repos/{owner}/{repo}/actions/permissions/artifact-and-log-retention\",\n \"GET /repos/{owner}/{repo}/actions/permissions/fork-pr-contributor-approval\",\n \"GET /repos/{owner}/{repo}/actions/permissions/fork-pr-workflows-private-repos\",\n \"GET /repos/{owner}/{repo}/actions/permissions/selected-actions\",\n \"GET /repos/{owner}/{repo}/actions/permissions/workflow\",\n \"GET /repos/{owner}/{repo}/actions/runners\",\n \"GET /repos/{owner}/{repo}/actions/runners/downloads\",\n \"GET /repos/{owner}/{repo}/actions/runners/{runner_id}\",\n \"GET /repos/{owner}/{repo}/actions/runners/{runner_id}/labels\",\n \"GET /repos/{owner}/{repo}/autolinks\",\n \"GET /repos/{owner}/{repo}/autolinks/{autolink_id}\",\n \"GET /repos/{owner}/{repo}/automated-security-fixes\",\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection\",\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins\",\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews\",\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures\",\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks\",\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts\",\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions\",\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps\",\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams\",\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users\",\n \"GET /repos/{owner}/{repo}/code-scanning/default-setup\",\n \"GET /repos/{owner}/{repo}/code-security-configuration\",\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps\",\n \"GET /repos/{owner}/{repo}/immutable-releases\",\n \"GET /repos/{owner}/{repo}/interaction-limits\",\n \"GET /repos/{owner}/{repo}/invitations\",\n \"GET /repos/{owner}/{repo}/keys\",\n \"GET /repos/{owner}/{repo}/keys/{key_id}\",\n \"GET /repos/{owner}/{repo}/rulesets/rule-suites\",\n \"GET /repos/{owner}/{repo}/rulesets/rule-suites/{rule_suite_id}\",\n \"GET /repos/{owner}/{repo}/teams\",\n \"GET /repos/{owner}/{repo}/traffic/clones\",\n \"GET /repos/{owner}/{repo}/traffic/popular/paths\",\n \"GET /repos/{owner}/{repo}/traffic/popular/referrers\",\n \"GET /repos/{owner}/{repo}/traffic/views\",\n \"GET /repos/{owner}/{repo}/vulnerability-alerts\",\n \"GET /user/repository_invitations\",\n ],\n },\n {\n name: \"artifact_metadata:write\",\n description: \"Artifact metadata\",\n rules: [\n \"POST /orgs/{org}/artifacts/metadata/deployment-record\",\n \"POST /orgs/{org}/artifacts/metadata/deployment-record/cluster/{cluster}\",\n \"POST /orgs/{org}/artifacts/metadata/storage-record\",\n ],\n },\n {\n name: \"artifact_metadata:read\",\n description: \"Artifact metadata\",\n rules: [\n \"GET /orgs/{org}/artifacts/{subject_digest}/metadata/deployment-records\",\n \"GET /orgs/{org}/artifacts/{subject_digest}/metadata/storage-records\",\n ],\n },\n {\n name: \"attestations:write\",\n description: \"Attestations\",\n rules: [\n \"POST /orgs/{org}/attestations/delete-request\",\n \"DELETE /orgs/{org}/attestations/digest/{subject_digest}\",\n \"DELETE /orgs/{org}/attestations/{attestation_id}\",\n \"POST /repos/{owner}/{repo}/attestations\",\n \"POST /users/{username}/attestations/delete-request\",\n \"DELETE /users/{username}/attestations/digest/{subject_digest}\",\n \"DELETE /users/{username}/attestations/{attestation_id}\",\n ],\n },\n {\n name: \"attestations:read\",\n description: \"Attestations\",\n rules: [\n \"GET /orgs/{org}/attestations/repositories\",\n \"GET /repos/{owner}/{repo}/attestations/{subject_digest}\",\n ],\n },\n {\n name: \"checks:write\",\n description: \"Checks\",\n rules: [\n \"POST /repos/{owner}/{repo}/check-runs\",\n \"PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}\",\n \"POST /repos/{owner}/{repo}/check-runs/{check_run_id}/rerequest\",\n \"POST /repos/{owner}/{repo}/check-suites\",\n \"PATCH /repos/{owner}/{repo}/check-suites/preferences\",\n \"POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest\",\n ],\n },\n {\n name: \"checks:read\",\n description: \"Checks\",\n rules: [\n \"GET /repos/{owner}/{repo}/check-runs/{check_run_id}\",\n \"GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations\",\n \"GET /repos/{owner}/{repo}/check-suites/{check_suite_id}\",\n \"GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs\",\n \"GET /repos/{owner}/{repo}/commits/{ref}/check-runs\",\n \"GET /repos/{owner}/{repo}/commits/{ref}/check-suites\",\n ],\n },\n {\n name: \"security_events:read\",\n description: \"Code scanning alerts\",\n rules: [\n \"GET /orgs/{org}/code-scanning/alerts\",\n \"GET /repos/{owner}/{repo}/code-scanning/alerts\",\n \"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}\",\n \"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix\",\n \"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances\",\n \"GET /repos/{owner}/{repo}/code-scanning/analyses\",\n \"GET /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}\",\n \"GET /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}\",\n ],\n },\n {\n name: \"security_events:write\",\n description: \"Code scanning alerts\",\n rules: [\n \"PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}\",\n \"POST /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix\",\n \"DELETE /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}\",\n \"POST /repos/{owner}/{repo}/code-scanning/sarifs\",\n ],\n },\n {\n name: \"codespaces_lifecycle_admin:write\",\n description: \"Codespaces lifecycle admin\",\n rules: [\n \"POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop\",\n \"POST /user/codespaces/{codespace_name}/exports\",\n \"POST /user/codespaces/{codespace_name}/start\",\n \"POST /user/codespaces/{codespace_name}/stop\",\n ],\n },\n {\n name: \"codespaces_lifecycle_admin:read\",\n description: \"Codespaces lifecycle admin\",\n rules: [\"GET /user/codespaces/{codespace_name}/exports/{export_id}\"],\n },\n {\n name: \"codespaces_metadata:read\",\n description: \"Codespaces metadata\",\n rules: [\n \"GET /repos/{owner}/{repo}/codespaces/devcontainers\",\n \"GET /repos/{owner}/{repo}/codespaces/machines\",\n \"GET /user/codespaces/{codespace_name}/machines\",\n ],\n },\n {\n name: \"codespaces_secrets:write\",\n description: \"Codespaces secrets\",\n rules: [\n \"GET /repos/{owner}/{repo}/codespaces/secrets\",\n \"GET /repos/{owner}/{repo}/codespaces/secrets/public-key\",\n \"GET /repos/{owner}/{repo}/codespaces/secrets/{secret_name}\",\n \"PUT /repos/{owner}/{repo}/codespaces/secrets/{secret_name}\",\n \"DELETE /repos/{owner}/{repo}/codespaces/secrets/{secret_name}\",\n ],\n },\n {\n name: \"codespaces:read\",\n description: \"Codespaces\",\n rules: [\n \"GET /orgs/{org}/codespaces\",\n \"GET /orgs/{org}/members/{username}/codespaces\",\n \"GET /repos/{owner}/{repo}/codespaces\",\n \"GET /user/codespaces\",\n \"GET /user/codespaces/{codespace_name}\",\n ],\n },\n {\n name: \"codespaces:write\",\n description: \"Codespaces\",\n rules: [\n \"DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}\",\n \"POST /repos/{owner}/{repo}/codespaces\",\n \"GET /repos/{owner}/{repo}/codespaces/new\",\n \"GET /repos/{owner}/{repo}/codespaces/permissions_check\",\n \"POST /repos/{owner}/{repo}/pulls/{pull_number}/codespaces\",\n \"POST /user/codespaces\",\n \"PATCH /user/codespaces/{codespace_name}\",\n \"DELETE /user/codespaces/{codespace_name}\",\n \"POST /user/codespaces/{codespace_name}/publish\",\n ],\n },\n {\n name: \"statuses:read\",\n description: \"Commit statuses\",\n rules: [\n \"GET /repos/{owner}/{repo}/commits/{ref}/status\",\n \"GET /repos/{owner}/{repo}/commits/{ref}/statuses\",\n ],\n },\n {\n name: \"statuses:write\",\n description: \"Commit statuses\",\n rules: [\"POST /repos/{owner}/{repo}/statuses/{sha}\"],\n },\n {\n name: \"contents:read\",\n description: \"Contents\",\n rules: [\n \"POST /markdown\",\n \"GET /orgs/{org}/artifacts/{subject_digest}/metadata/deployment-records\",\n \"GET /orgs/{org}/artifacts/{subject_digest}/metadata/storage-records\",\n \"GET /repos/{owner}/{repo}/activity\",\n \"GET /repos/{owner}/{repo}/branches\",\n \"GET /repos/{owner}/{repo}/branches/{branch}\",\n \"GET /repos/{owner}/{repo}/code-scanning/codeql/databases\",\n \"GET /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}\",\n \"GET /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses/{codeql_variant_analysis_id}\",\n \"GET /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses/{codeql_variant_analysis_id}/repos/{repo_owner}/{repo_name}\",\n \"GET /repos/{owner}/{repo}/codeowners/errors\",\n \"GET /repos/{owner}/{repo}/commits\",\n \"GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head\",\n \"POST /repos/{owner}/{repo}/commits/{commit_sha}/comments\",\n \"GET /repos/{owner}/{repo}/commits/{ref}\",\n \"GET /repos/{owner}/{repo}/community/profile\",\n \"GET /repos/{owner}/{repo}/compare/{basehead+}\",\n \"GET /repos/{owner}/{repo}/contents/{path*}\",\n \"GET /repos/{owner}/{repo}/dependency-graph/compare/{basehead+}\",\n \"GET /repos/{owner}/{repo}/dependency-graph/sbom\",\n \"POST /repos/{owner}/{repo}/forks\",\n \"GET /repos/{owner}/{repo}/git/blobs/{file_sha}\",\n \"GET /repos/{owner}/{repo}/git/commits/{commit_sha}\",\n \"GET /repos/{owner}/{repo}/git/matching-refs/{ref+}\",\n \"GET /repos/{owner}/{repo}/git/ref/{ref+}\",\n \"GET /repos/{owner}/{repo}/git/tags/{tag_sha}\",\n \"GET /repos/{owner}/{repo}/git/trees/{tree_sha}\",\n \"GET /repos/{owner}/{repo}/import\",\n \"GET /repos/{owner}/{repo}/import/authors\",\n \"GET /repos/{owner}/{repo}/import/large_files\",\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}\",\n \"GET /repos/{owner}/{repo}/readme\",\n \"GET /repos/{owner}/{repo}/readme/{dir}\",\n \"GET /repos/{owner}/{repo}/releases\",\n \"GET /repos/{owner}/{repo}/releases/assets/{asset_id}\",\n \"GET /repos/{owner}/{repo}/releases/latest\",\n \"GET /repos/{owner}/{repo}/releases/tags/{tag}\",\n \"GET /repos/{owner}/{repo}/releases/{release_id}\",\n \"GET /repos/{owner}/{repo}/releases/{release_id}/assets\",\n \"GET /repos/{owner}/{repo}/tarball/{ref}\",\n \"GET /repos/{owner}/{repo}/zipball/{ref}\",\n \"POST /repos/{template_owner}/{template_repo}/generate\",\n ],\n },\n {\n name: \"contents:write\",\n description: \"Contents\",\n rules: [\n \"POST /orgs/{org}/artifacts/metadata/deployment-record\",\n \"POST /orgs/{org}/artifacts/metadata/deployment-record/cluster/{cluster}\",\n \"POST /orgs/{org}/artifacts/metadata/storage-record\",\n \"POST /repos/{owner}/{repo}/branches/{branch}/rename\",\n \"POST /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix/commits\",\n \"DELETE /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}\",\n \"POST /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses\",\n \"PATCH /repos/{owner}/{repo}/comments/{comment_id}\",\n \"DELETE /repos/{owner}/{repo}/comments/{comment_id}\",\n \"POST /repos/{owner}/{repo}/comments/{comment_id}/reactions\",\n \"DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}\",\n \"PUT /repos/{owner}/{repo}/contents/{path*}\",\n \"DELETE /repos/{owner}/{repo}/contents/{path*}\",\n \"POST /repos/{owner}/{repo}/dependency-graph/snapshots\",\n \"POST /repos/{owner}/{repo}/dispatches\",\n \"POST /repos/{owner}/{repo}/git/blobs\",\n \"POST /repos/{owner}/{repo}/git/commits\",\n \"POST /repos/{owner}/{repo}/git/refs\",\n \"PATCH /repos/{owner}/{repo}/git/refs/{ref+}\",\n \"DELETE /repos/{owner}/{repo}/git/refs/{ref+}\",\n \"POST /repos/{owner}/{repo}/git/tags\",\n \"POST /repos/{owner}/{repo}/git/trees\",\n \"PUT /repos/{owner}/{repo}/import\",\n \"PATCH /repos/{owner}/{repo}/import\",\n \"DELETE /repos/{owner}/{repo}/import\",\n \"PATCH /repos/{owner}/{repo}/import/authors/{author_id}\",\n \"PATCH /repos/{owner}/{repo}/import/lfs\",\n \"POST /repos/{owner}/{repo}/merge-upstream\",\n \"POST /repos/{owner}/{repo}/merges\",\n \"PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge\",\n \"POST /repos/{owner}/{repo}/releases\",\n \"PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}\",\n \"DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}\",\n \"POST /repos/{owner}/{repo}/releases/generate-notes\",\n \"PATCH /repos/{owner}/{repo}/releases/{release_id}\",\n \"DELETE /repos/{owner}/{repo}/releases/{release_id}\",\n \"POST /repos/{owner}/{repo}/secret-scanning/push-protection-bypasses\",\n ],\n },\n {\n name: \"repository_custom_properties:write\",\n description: \"Custom properties\",\n rules: [\"PATCH /repos/{owner}/{repo}/properties/values\"],\n },\n {\n name: \"vulnerability_alerts:read\",\n description: \"Dependabot alerts\",\n rules: [\n \"GET /orgs/{org}/dependabot/alerts\",\n \"GET /repos/{owner}/{repo}/dependabot/alerts\",\n \"GET /repos/{owner}/{repo}/dependabot/alerts/{alert_number}\",\n ],\n },\n {\n name: \"vulnerability_alerts:write\",\n description: \"Dependabot alerts\",\n rules: [\n \"PATCH /repos/{owner}/{repo}/dependabot/alerts/{alert_number}\",\n ],\n },\n {\n name: \"dependabot_secrets:read\",\n description: \"Dependabot secrets\",\n rules: [\n \"GET /repos/{owner}/{repo}/dependabot/secrets\",\n \"GET /repos/{owner}/{repo}/dependabot/secrets/public-key\",\n \"GET /repos/{owner}/{repo}/dependabot/secrets/{secret_name}\",\n ],\n },\n {\n name: \"dependabot_secrets:write\",\n description: \"Dependabot secrets\",\n rules: [\n \"PUT /repos/{owner}/{repo}/dependabot/secrets/{secret_name}\",\n \"DELETE /repos/{owner}/{repo}/dependabot/secrets/{secret_name}\",\n ],\n },\n {\n name: \"deployments:write\",\n description: \"Deployments\",\n rules: [\n \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule\",\n \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments\",\n \"POST /repos/{owner}/{repo}/deployments\",\n \"DELETE /repos/{owner}/{repo}/deployments/{deployment_id}\",\n \"POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses\",\n ],\n },\n {\n name: \"deployments:read\",\n description: \"Deployments\",\n rules: [\n \"GET /repos/{owner}/{repo}/deployments\",\n \"GET /repos/{owner}/{repo}/deployments/{deployment_id}\",\n \"GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses\",\n \"GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}\",\n ],\n },\n {\n name: \"environments:read\",\n description: \"Environments\",\n rules: [\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/secrets\",\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/public-key\",\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}\",\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/variables\",\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}\",\n ],\n },\n {\n name: \"environments:write\",\n description: \"Environments\",\n rules: [\n \"PUT /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}\",\n \"DELETE /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}\",\n \"POST /repos/{owner}/{repo}/environments/{environment_name}/variables\",\n \"PATCH /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}\",\n \"DELETE /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}\",\n ],\n },\n {\n name: \"issues:read\",\n description: \"Issues\",\n rules: [\n \"GET /repos/{owner}/{repo}/assignees\",\n \"GET /repos/{owner}/{repo}/assignees/{assignee}\",\n \"GET /repos/{owner}/{repo}/issues\",\n \"GET /repos/{owner}/{repo}/issues/comments\",\n \"GET /repos/{owner}/{repo}/issues/comments/{comment_id}\",\n \"GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions\",\n \"GET /repos/{owner}/{repo}/issues/events\",\n \"GET /repos/{owner}/{repo}/issues/events/{event_id}\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/assignees/{assignee}\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/comments\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocking\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/events\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/issue-field-values\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/labels\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/parent\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/reactions\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/sub_issues\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/timeline\",\n \"GET /repos/{owner}/{repo}/labels\",\n \"GET /repos/{owner}/{repo}/labels/{name}\",\n \"GET /repos/{owner}/{repo}/milestones\",\n \"GET /repos/{owner}/{repo}/milestones/{milestone_number}\",\n \"GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels\",\n ],\n },\n {\n name: \"issues:write\",\n description: \"Issues\",\n rules: [\n \"POST /repos/{owner}/{repo}/issues\",\n \"PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}\",\n \"DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}\",\n \"PUT /repos/{owner}/{repo}/issues/comments/{comment_id}/pin\",\n \"DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/pin\",\n \"POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions\",\n \"DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}\",\n \"PATCH /repos/{owner}/{repo}/issues/{issue_number}\",\n \"POST /repos/{owner}/{repo}/issues/{issue_number}/assignees\",\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees\",\n \"POST /repos/{owner}/{repo}/issues/{issue_number}/comments\",\n \"POST /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by\",\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by/{issue_id}\",\n \"POST /repos/{owner}/{repo}/issues/{issue_number}/labels\",\n \"PUT /repos/{owner}/{repo}/issues/{issue_number}/labels\",\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels\",\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}\",\n \"PUT /repos/{owner}/{repo}/issues/{issue_number}/lock\",\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock\",\n \"POST /repos/{owner}/{repo}/issues/{issue_number}/reactions\",\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}\",\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/sub_issue\",\n \"POST /repos/{owner}/{repo}/issues/{issue_number}/sub_issues\",\n \"PATCH /repos/{owner}/{repo}/issues/{issue_number}/sub_issues/priority\",\n \"POST /repos/{owner}/{repo}/labels\",\n \"PATCH /repos/{owner}/{repo}/labels/{name}\",\n \"DELETE /repos/{owner}/{repo}/labels/{name}\",\n \"POST /repos/{owner}/{repo}/milestones\",\n \"PATCH /repos/{owner}/{repo}/milestones/{milestone_number}\",\n \"DELETE /repos/{owner}/{repo}/milestones/{milestone_number}\",\n \"POST /repositories/{repository_id}/issues/{issue_number}/issue-field-values\",\n \"PUT /repositories/{repository_id}/issues/{issue_number}/issue-field-values\",\n \"DELETE /repositories/{repository_id}/issues/{issue_number}/issue-field-values/{issue_field_id}\",\n ],\n },\n {\n name: \"metadata:read\",\n description: \"Metadata\",\n rules: [\n \"GET /orgs/{org}/repos\",\n \"GET /repos/{owner}/{repo}\",\n \"GET /repos/{owner}/{repo}/collaborators\",\n \"GET /repos/{owner}/{repo}/collaborators/{username}\",\n \"GET /repos/{owner}/{repo}/collaborators/{username}/permission\",\n \"GET /repos/{owner}/{repo}/comments\",\n \"GET /repos/{owner}/{repo}/comments/{comment_id}\",\n \"GET /repos/{owner}/{repo}/comments/{comment_id}/reactions\",\n \"GET /repos/{owner}/{repo}/commits/{commit_sha}/comments\",\n \"GET /repos/{owner}/{repo}/contributors\",\n \"GET /repos/{owner}/{repo}/events\",\n \"GET /repos/{owner}/{repo}/forks\",\n \"GET /repos/{owner}/{repo}/languages\",\n \"GET /repos/{owner}/{repo}/license\",\n \"GET /repos/{owner}/{repo}/private-vulnerability-reporting\",\n \"GET /repos/{owner}/{repo}/properties/values\",\n \"GET /repos/{owner}/{repo}/rules/branches/{branch}\",\n \"GET /repos/{owner}/{repo}/rulesets\",\n \"GET /repos/{owner}/{repo}/rulesets/{ruleset_id}\",\n \"GET /repos/{owner}/{repo}/stargazers\",\n \"GET /repos/{owner}/{repo}/stats/code_frequency\",\n \"GET /repos/{owner}/{repo}/stats/commit_activity\",\n \"GET /repos/{owner}/{repo}/stats/contributors\",\n \"GET /repos/{owner}/{repo}/stats/participation\",\n \"GET /repos/{owner}/{repo}/stats/punch_card\",\n \"GET /repos/{owner}/{repo}/subscribers\",\n \"GET /repos/{owner}/{repo}/tags\",\n \"GET /repos/{owner}/{repo}/topics\",\n \"GET /repositories\",\n \"GET /search/labels\",\n \"GET /user/installations/{installation_id}/repositories\",\n \"GET /user/repos\",\n \"GET /users/{username}/repos\",\n ],\n },\n {\n name: \"pages:read\",\n description: \"Pages\",\n rules: [\n \"GET /repos/{owner}/{repo}/pages\",\n \"GET /repos/{owner}/{repo}/pages/builds\",\n \"GET /repos/{owner}/{repo}/pages/builds/latest\",\n \"GET /repos/{owner}/{repo}/pages/builds/{build_id}\",\n \"GET /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}\",\n ],\n },\n {\n name: \"pages:write\",\n description: \"Pages\",\n rules: [\n \"POST /repos/{owner}/{repo}/pages\",\n \"PUT /repos/{owner}/{repo}/pages\",\n \"DELETE /repos/{owner}/{repo}/pages\",\n \"POST /repos/{owner}/{repo}/pages/builds\",\n \"POST /repos/{owner}/{repo}/pages/deployments\",\n \"POST /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}/cancel\",\n \"GET /repos/{owner}/{repo}/pages/health\",\n ],\n },\n {\n name: \"pull_requests:read\",\n description: \"Pull requests\",\n rules: [\n \"GET /repos/{owner}/{repo}/assignees\",\n \"GET /repos/{owner}/{repo}/assignees/{assignee}\",\n \"GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls\",\n \"GET /repos/{owner}/{repo}/issues/comments\",\n \"GET /repos/{owner}/{repo}/issues/comments/{comment_id}\",\n \"GET /repos/{owner}/{repo}/issues/events/{event_id}\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/assignees/{assignee}\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/comments\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/events\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/labels\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/timeline\",\n \"GET /repos/{owner}/{repo}/labels\",\n \"GET /repos/{owner}/{repo}/labels/{name}\",\n \"GET /repos/{owner}/{repo}/milestones\",\n \"GET /repos/{owner}/{repo}/milestones/{milestone_number}\",\n \"GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels\",\n \"GET /repos/{owner}/{repo}/pulls\",\n \"GET /repos/{owner}/{repo}/pulls/comments\",\n \"GET /repos/{owner}/{repo}/pulls/comments/{comment_id}\",\n \"GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions\",\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}\",\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/comments\",\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/commits\",\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/files\",\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/merge\",\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers\",\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews\",\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}\",\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments\",\n ],\n },\n {\n name: \"pull_requests:write\",\n description: \"Pull requests\",\n rules: [\n \"PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}\",\n \"DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}\",\n \"PATCH /repos/{owner}/{repo}/issues/{issue_number}\",\n \"POST /repos/{owner}/{repo}/issues/{issue_number}/assignees\",\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees\",\n \"POST /repos/{owner}/{repo}/issues/{issue_number}/comments\",\n \"POST /repos/{owner}/{repo}/issues/{issue_number}/labels\",\n \"PUT /repos/{owner}/{repo}/issues/{issue_number}/labels\",\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels\",\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}\",\n \"PUT /repos/{owner}/{repo}/issues/{issue_number}/lock\",\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock\",\n \"POST /repos/{owner}/{repo}/labels\",\n \"PATCH /repos/{owner}/{repo}/labels/{name}\",\n \"DELETE /repos/{owner}/{repo}/labels/{name}\",\n \"POST /repos/{owner}/{repo}/milestones\",\n \"PATCH /repos/{owner}/{repo}/milestones/{milestone_number}\",\n \"DELETE /repos/{owner}/{repo}/milestones/{milestone_number}\",\n \"POST /repos/{owner}/{repo}/pulls\",\n \"PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}\",\n \"DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}\",\n \"POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions\",\n \"DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}\",\n \"PATCH /repos/{owner}/{repo}/pulls/{pull_number}\",\n \"POST /repos/{owner}/{repo}/pulls/{pull_number}/comments\",\n \"POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies\",\n \"POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers\",\n \"DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers\",\n \"POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews\",\n \"PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}\",\n \"DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}\",\n \"PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals\",\n \"POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events\",\n \"PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch\",\n \"POST /repositories/{repository_id}/issues/{issue_number}/issue-field-values\",\n \"PUT /repositories/{repository_id}/issues/{issue_number}/issue-field-values\",\n \"DELETE /repositories/{repository_id}/issues/{issue_number}/issue-field-values/{issue_field_id}\",\n ],\n },\n {\n name: \"repository_advisories:write\",\n description: \"Repository security advisories\",\n rules: [\n \"GET /orgs/{org}/security-advisories\",\n \"POST /repos/{owner}/{repo}/security-advisories\",\n \"POST /repos/{owner}/{repo}/security-advisories/reports\",\n \"PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id}\",\n \"POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/cve\",\n ],\n },\n {\n name: \"repository_advisories:read\",\n description: \"Repository security advisories\",\n rules: [\n \"GET /repos/{owner}/{repo}/security-advisories\",\n \"GET /repos/{owner}/{repo}/security-advisories/{ghsa_id}\",\n \"POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/forks\",\n ],\n },\n {\n name: \"secret_scanning_alerts:read\",\n description: \"Secret scanning alerts\",\n rules: [\n \"GET /orgs/{org}/secret-scanning/alerts\",\n \"GET /repos/{owner}/{repo}/secret-scanning/alerts\",\n \"GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}\",\n \"GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations\",\n \"GET /repos/{owner}/{repo}/secret-scanning/scan-history\",\n ],\n },\n {\n name: \"secret_scanning_alerts:write\",\n description: \"Secret scanning alerts\",\n rules: [\n \"PATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}\",\n ],\n },\n {\n name: \"secrets:read\",\n description: \"Secrets\",\n rules: [\n \"GET /repos/{owner}/{repo}/actions/organization-secrets\",\n \"GET /repos/{owner}/{repo}/actions/secrets\",\n \"GET /repos/{owner}/{repo}/actions/secrets/public-key\",\n \"GET /repos/{owner}/{repo}/actions/secrets/{secret_name}\",\n ],\n },\n {\n name: \"secrets:write\",\n description: \"Secrets\",\n rules: [\n \"PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}\",\n \"DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}\",\n ],\n },\n {\n name: \"actions_variables:read\",\n description: \"Variables\",\n rules: [\n \"GET /repos/{owner}/{repo}/actions/organization-variables\",\n \"GET /repos/{owner}/{repo}/actions/variables\",\n \"GET /repos/{owner}/{repo}/actions/variables/{name}\",\n ],\n },\n {\n name: \"actions_variables:write\",\n description: \"Variables\",\n rules: [\n \"POST /repos/{owner}/{repo}/actions/variables\",\n \"PATCH /repos/{owner}/{repo}/actions/variables/{name}\",\n \"DELETE /repos/{owner}/{repo}/actions/variables/{name}\",\n ],\n },\n {\n name: \"repository_hooks:read\",\n description: \"Webhooks\",\n rules: [\n \"GET /repos/{owner}/{repo}/hooks\",\n \"GET /repos/{owner}/{repo}/hooks/{hook_id}\",\n \"GET /repos/{owner}/{repo}/hooks/{hook_id}/config\",\n \"GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries\",\n \"GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}\",\n \"POST /repos/{owner}/{repo}/hooks/{hook_id}/pings\",\n \"POST /repos/{owner}/{repo}/hooks/{hook_id}/tests\",\n ],\n },\n {\n name: \"repository_hooks:write\",\n description: \"Webhooks\",\n rules: [\n \"POST /repos/{owner}/{repo}/hooks\",\n \"PATCH /repos/{owner}/{repo}/hooks/{hook_id}\",\n \"DELETE /repos/{owner}/{repo}/hooks/{hook_id}\",\n \"PATCH /repos/{owner}/{repo}/hooks/{hook_id}/config\",\n \"POST /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}/attempts\",\n ],\n },\n {\n name: \"workflows:write\",\n description: \"Workflows\",\n rules: [\n \"PUT /repos/{owner}/{repo}/contents/{path*}\",\n \"DELETE /repos/{owner}/{repo}/contents/{path*}\",\n \"POST /repos/{owner}/{repo}/git/refs\",\n \"PATCH /repos/{owner}/{repo}/git/refs/{ref+}\",\n \"POST /repos/{owner}/{repo}/releases\",\n ],\n },\n {\n name: \"blocking:read\",\n description: \"Block another user\",\n rules: [\"GET /user/blocks\", \"GET /user/blocks/{username}\"],\n },\n {\n name: \"blocking:write\",\n description: \"Block another user\",\n rules: [\n \"PUT /user/blocks/{username}\",\n \"DELETE /user/blocks/{username}\",\n ],\n },\n {\n name: \"codespaces_user_secrets:read\",\n description: \"Codespaces user secrets\",\n rules: [\n \"GET /user/codespaces/secrets\",\n \"GET /user/codespaces/secrets/public-key\",\n \"GET /user/codespaces/secrets/{secret_name}\",\n \"GET /user/codespaces/secrets/{secret_name}/repositories\",\n ],\n },\n {\n name: \"codespaces_user_secrets:write\",\n description: \"Codespaces user secrets\",\n rules: [\n \"PUT /user/codespaces/secrets/{secret_name}\",\n \"DELETE /user/codespaces/secrets/{secret_name}\",\n \"PUT /user/codespaces/secrets/{secret_name}/repositories\",\n \"PUT /user/codespaces/secrets/{secret_name}/repositories/{repository_id}\",\n \"DELETE /user/codespaces/secrets/{secret_name}/repositories/{repository_id}\",\n ],\n },\n {\n name: \"emails:write\",\n description: \"Email addresses\",\n rules: [\n \"PATCH /user/email/visibility\",\n \"POST /user/emails\",\n \"DELETE /user/emails\",\n ],\n },\n {\n name: \"emails:read\",\n description: \"Email addresses\",\n rules: [\"GET /user/emails\", \"GET /user/public_emails\"],\n },\n {\n name: \"followers:read\",\n description: \"Followers\",\n rules: [\n \"GET /user/followers\",\n \"GET /user/following\",\n \"GET /user/following/{username}\",\n ],\n },\n {\n name: \"followers:write\",\n description: \"Followers\",\n rules: [\n \"PUT /user/following/{username}\",\n \"DELETE /user/following/{username}\",\n ],\n },\n {\n name: \"gpg_keys:read\",\n description: \"GPG keys\",\n rules: [\"GET /user/gpg_keys\", \"GET /user/gpg_keys/{gpg_key_id}\"],\n },\n {\n name: \"gpg_keys:write\",\n description: \"GPG keys\",\n rules: [\"POST /user/gpg_keys\", \"DELETE /user/gpg_keys/{gpg_key_id}\"],\n },\n {\n name: \"gists:write\",\n description: \"Gists\",\n rules: [\n \"POST /gists\",\n \"PATCH /gists/{gist_id}\",\n \"DELETE /gists/{gist_id}\",\n \"POST /gists/{gist_id}/comments\",\n \"PATCH /gists/{gist_id}/comments/{comment_id}\",\n \"DELETE /gists/{gist_id}/comments/{comment_id}\",\n \"POST /gists/{gist_id}/forks\",\n \"PUT /gists/{gist_id}/star\",\n \"DELETE /gists/{gist_id}/star\",\n ],\n },\n {\n name: \"keys:read\",\n description: \"Git SSH keys\",\n rules: [\n \"GET /user/keys\",\n \"GET /user/keys/{key_id}\",\n \"GET /users/{username}/keys\",\n ],\n },\n {\n name: \"keys:write\",\n description: \"Git SSH keys\",\n rules: [\"POST /user/keys\", \"DELETE /user/keys/{key_id}\"],\n },\n {\n name: \"interaction_limits:read\",\n description: \"Interaction limits\",\n rules: [\"GET /user/interaction-limits\"],\n },\n {\n name: \"interaction_limits:write\",\n description: \"Interaction limits\",\n rules: [\n \"PUT /user/interaction-limits\",\n \"DELETE /user/interaction-limits\",\n ],\n },\n {\n name: \"plan:read\",\n description: \"Plan\",\n rules: [\n \"GET /users/{username}/settings/billing/premium_request/usage\",\n \"GET /users/{username}/settings/billing/usage\",\n \"GET /users/{username}/settings/billing/usage/summary\",\n ],\n },\n {\n name: \"private_repository_invitations:read\",\n description: \"Private repository invitations\",\n rules: [\"GET /repos/{owner}/{repo}/invitations\"],\n },\n {\n name: \"profile:write\",\n description: \"Profile\",\n rules: [\n \"PATCH /user\",\n \"POST /user/social_accounts\",\n \"DELETE /user/social_accounts\",\n ],\n },\n {\n name: \"git_signing_ssh_public_keys:read\",\n description: \"SSH signing keys\",\n rules: [\n \"GET /user/ssh_signing_keys\",\n \"GET /user/ssh_signing_keys/{ssh_signing_key_id}\",\n ],\n },\n {\n name: \"git_signing_ssh_public_keys:write\",\n description: \"SSH signing keys\",\n rules: [\n \"POST /user/ssh_signing_keys\",\n \"DELETE /user/ssh_signing_keys/{ssh_signing_key_id}\",\n ],\n },\n {\n name: \"starring:read\",\n description: \"Starring\",\n rules: [\n \"GET /user/starred\",\n \"GET /user/starred/{owner}/{repo}\",\n \"GET /users/{username}/starred\",\n ],\n },\n {\n name: \"starring:write\",\n description: \"Starring\",\n rules: [\n \"PUT /user/starred/{owner}/{repo}\",\n \"DELETE /user/starred/{owner}/{repo}\",\n ],\n },\n {\n name: \"watching:read\",\n description: \"Watching\",\n rules: [\n \"GET /user/subscriptions\",\n \"GET /users/{username}/subscriptions\",\n ],\n },\n ],\n },\n {\n base: \"https://uploads.github.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.GITHUB_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"contents:write\",\n description: \"Upload release assets\",\n rules: [\"POST /repos/{owner}/{repo}/releases/{release_id}/assets\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from GitLab API docs.\n// Source: https://docs.gitlab.com/api/rest/authentication/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:gitlab\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const gitlabFirewall: FirewallConfig = {\n name: \"gitlab\",\n description: \"GitLab API\",\n placeholders: {\n GITLAB_TOKEN: \"glpat-CoffeeSafeLocalCoffe\",\n },\n apis: [\n {\n base: \"https://gitlab.com/api\",\n auth: {\n headers: {\n \"PRIVATE-TOKEN\": \"${{ secrets.GITLAB_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Google's Discovery API.\n// Source: https://gmail.googleapis.com/$discovery/rest?version=v1\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:gmail\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const gmailFirewall: FirewallConfig = {\n name: \"gmail\",\n description: \"Gmail API\",\n placeholders: {\n GMAIL_TOKEN:\n \"ya29.A0CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSa\",\n },\n apis: [\n {\n base: \"https://gmail.googleapis.com/gmail\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.GMAIL_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"gmail\",\n description:\n \"Read, compose, send, and permanently delete all your email from Gmail\",\n rules: [\n \"GET /v1/users/{userId}/drafts\",\n \"POST /v1/users/{userId}/drafts\",\n \"POST /v1/users/{userId}/drafts/send\",\n \"GET /v1/users/{userId}/drafts/{id}\",\n \"PUT /v1/users/{userId}/drafts/{id}\",\n \"DELETE /v1/users/{userId}/drafts/{id}\",\n \"GET /v1/users/{userId}/history\",\n \"GET /v1/users/{userId}/labels\",\n \"POST /v1/users/{userId}/labels\",\n \"GET /v1/users/{userId}/labels/{id}\",\n \"PUT /v1/users/{userId}/labels/{id}\",\n \"PATCH /v1/users/{userId}/labels/{id}\",\n \"DELETE /v1/users/{userId}/labels/{id}\",\n \"GET /v1/users/{userId}/messages\",\n \"POST /v1/users/{userId}/messages\",\n \"POST /v1/users/{userId}/messages/batchDelete\",\n \"POST /v1/users/{userId}/messages/batchModify\",\n \"POST /v1/users/{userId}/messages/import\",\n \"POST /v1/users/{userId}/messages/send\",\n \"GET /v1/users/{userId}/messages/{id}\",\n \"DELETE /v1/users/{userId}/messages/{id}\",\n \"POST /v1/users/{userId}/messages/{id}/modify\",\n \"POST /v1/users/{userId}/messages/{id}/trash\",\n \"POST /v1/users/{userId}/messages/{id}/untrash\",\n \"GET /v1/users/{userId}/messages/{messageId}/attachments/{id}\",\n \"GET /v1/users/{userId}/profile\",\n \"GET /v1/users/{userId}/settings/autoForwarding\",\n \"GET /v1/users/{userId}/settings/cse/identities\",\n \"GET /v1/users/{userId}/settings/cse/identities/{cseEmailAddress}\",\n \"GET /v1/users/{userId}/settings/cse/keypairs\",\n \"GET /v1/users/{userId}/settings/cse/keypairs/{keyPairId}\",\n \"GET /v1/users/{userId}/settings/delegates\",\n \"GET /v1/users/{userId}/settings/delegates/{delegateEmail}\",\n \"GET /v1/users/{userId}/settings/filters\",\n \"GET /v1/users/{userId}/settings/filters/{id}\",\n \"GET /v1/users/{userId}/settings/forwardingAddresses\",\n \"GET /v1/users/{userId}/settings/forwardingAddresses/{forwardingEmail}\",\n \"GET /v1/users/{userId}/settings/imap\",\n \"GET /v1/users/{userId}/settings/language\",\n \"GET /v1/users/{userId}/settings/pop\",\n \"GET /v1/users/{userId}/settings/sendAs\",\n \"GET /v1/users/{userId}/settings/sendAs/{sendAsEmail}\",\n \"GET /v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo\",\n \"GET /v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}\",\n \"GET /v1/users/{userId}/settings/vacation\",\n \"POST /v1/users/{userId}/stop\",\n \"GET /v1/users/{userId}/threads\",\n \"GET /v1/users/{userId}/threads/{id}\",\n \"DELETE /v1/users/{userId}/threads/{id}\",\n \"POST /v1/users/{userId}/threads/{id}/modify\",\n \"POST /v1/users/{userId}/threads/{id}/trash\",\n \"POST /v1/users/{userId}/threads/{id}/untrash\",\n \"POST /v1/users/{userId}/watch\",\n ],\n },\n {\n name: \"gmail.addons.current.action.compose\",\n description:\n \"Manage drafts and send emails when you interact with the add-on\",\n rules: [\n \"POST /v1/users/{userId}/drafts\",\n \"POST /v1/users/{userId}/drafts/send\",\n \"PUT /v1/users/{userId}/drafts/{id}\",\n \"DELETE /v1/users/{userId}/drafts/{id}\",\n \"POST /v1/users/{userId}/messages/send\",\n ],\n },\n {\n name: \"gmail.addons.current.message.action\",\n description:\n \"View your email messages when you interact with the add-on\",\n rules: [\n \"GET /v1/users/{userId}/messages/{id}\",\n \"GET /v1/users/{userId}/messages/{messageId}/attachments/{id}\",\n \"GET /v1/users/{userId}/threads/{id}\",\n ],\n },\n {\n name: \"gmail.addons.current.message.metadata\",\n description:\n \"View your email message metadata when the add-on is running\",\n rules: [\n \"GET /v1/users/{userId}/messages/{id}\",\n \"GET /v1/users/{userId}/threads/{id}\",\n ],\n },\n {\n name: \"gmail.addons.current.message.readonly\",\n description: \"View your email messages when the add-on is running\",\n rules: [\n \"GET /v1/users/{userId}/messages/{id}\",\n \"GET /v1/users/{userId}/messages/{messageId}/attachments/{id}\",\n \"GET /v1/users/{userId}/threads/{id}\",\n ],\n },\n {\n name: \"gmail.compose\",\n description: \"Manage drafts and send emails\",\n rules: [\n \"GET /v1/users/{userId}/drafts\",\n \"POST /v1/users/{userId}/drafts\",\n \"POST /v1/users/{userId}/drafts/send\",\n \"GET /v1/users/{userId}/drafts/{id}\",\n \"PUT /v1/users/{userId}/drafts/{id}\",\n \"DELETE /v1/users/{userId}/drafts/{id}\",\n \"POST /v1/users/{userId}/messages/send\",\n \"GET /v1/users/{userId}/profile\",\n ],\n },\n {\n name: \"gmail.insert\",\n description: \"Add emails into your Gmail mailbox\",\n rules: [\n \"POST /v1/users/{userId}/messages\",\n \"POST /v1/users/{userId}/messages/import\",\n ],\n },\n {\n name: \"gmail.labels\",\n description: \"See and edit your email labels\",\n rules: [\n \"GET /v1/users/{userId}/labels\",\n \"POST /v1/users/{userId}/labels\",\n \"GET /v1/users/{userId}/labels/{id}\",\n \"PUT /v1/users/{userId}/labels/{id}\",\n \"PATCH /v1/users/{userId}/labels/{id}\",\n \"DELETE /v1/users/{userId}/labels/{id}\",\n ],\n },\n {\n name: \"gmail.metadata\",\n description:\n \"View your email message metadata such as labels and headers, but not the email body\",\n rules: [\n \"GET /v1/users/{userId}/history\",\n \"GET /v1/users/{userId}/labels\",\n \"GET /v1/users/{userId}/labels/{id}\",\n \"GET /v1/users/{userId}/messages\",\n \"GET /v1/users/{userId}/messages/{id}\",\n \"GET /v1/users/{userId}/profile\",\n \"POST /v1/users/{userId}/stop\",\n \"GET /v1/users/{userId}/threads\",\n \"GET /v1/users/{userId}/threads/{id}\",\n \"POST /v1/users/{userId}/watch\",\n ],\n },\n {\n name: \"gmail.modify\",\n description: \"Read, compose, and send emails from your Gmail account\",\n rules: [\n \"GET /v1/users/{userId}/drafts\",\n \"POST /v1/users/{userId}/drafts\",\n \"POST /v1/users/{userId}/drafts/send\",\n \"GET /v1/users/{userId}/drafts/{id}\",\n \"PUT /v1/users/{userId}/drafts/{id}\",\n \"DELETE /v1/users/{userId}/drafts/{id}\",\n \"GET /v1/users/{userId}/history\",\n \"GET /v1/users/{userId}/labels\",\n \"POST /v1/users/{userId}/labels\",\n \"GET /v1/users/{userId}/labels/{id}\",\n \"PUT /v1/users/{userId}/labels/{id}\",\n \"PATCH /v1/users/{userId}/labels/{id}\",\n \"DELETE /v1/users/{userId}/labels/{id}\",\n \"GET /v1/users/{userId}/messages\",\n \"POST /v1/users/{userId}/messages\",\n \"POST /v1/users/{userId}/messages/batchModify\",\n \"POST /v1/users/{userId}/messages/import\",\n \"POST /v1/users/{userId}/messages/send\",\n \"GET /v1/users/{userId}/messages/{id}\",\n \"POST /v1/users/{userId}/messages/{id}/modify\",\n \"POST /v1/users/{userId}/messages/{id}/trash\",\n \"POST /v1/users/{userId}/messages/{id}/untrash\",\n \"GET /v1/users/{userId}/messages/{messageId}/attachments/{id}\",\n \"GET /v1/users/{userId}/profile\",\n \"GET /v1/users/{userId}/settings/autoForwarding\",\n \"GET /v1/users/{userId}/settings/cse/identities\",\n \"GET /v1/users/{userId}/settings/cse/identities/{cseEmailAddress}\",\n \"GET /v1/users/{userId}/settings/cse/keypairs\",\n \"GET /v1/users/{userId}/settings/cse/keypairs/{keyPairId}\",\n \"GET /v1/users/{userId}/settings/delegates\",\n \"GET /v1/users/{userId}/settings/delegates/{delegateEmail}\",\n \"GET /v1/users/{userId}/settings/filters\",\n \"GET /v1/users/{userId}/settings/filters/{id}\",\n \"GET /v1/users/{userId}/settings/forwardingAddresses\",\n \"GET /v1/users/{userId}/settings/forwardingAddresses/{forwardingEmail}\",\n \"GET /v1/users/{userId}/settings/imap\",\n \"GET /v1/users/{userId}/settings/language\",\n \"GET /v1/users/{userId}/settings/pop\",\n \"GET /v1/users/{userId}/settings/sendAs\",\n \"GET /v1/users/{userId}/settings/sendAs/{sendAsEmail}\",\n \"GET /v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo\",\n \"GET /v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}\",\n \"GET /v1/users/{userId}/settings/vacation\",\n \"POST /v1/users/{userId}/stop\",\n \"GET /v1/users/{userId}/threads\",\n \"GET /v1/users/{userId}/threads/{id}\",\n \"POST /v1/users/{userId}/threads/{id}/modify\",\n \"POST /v1/users/{userId}/threads/{id}/trash\",\n \"POST /v1/users/{userId}/threads/{id}/untrash\",\n \"POST /v1/users/{userId}/watch\",\n ],\n },\n {\n name: \"gmail.readonly\",\n description: \"View your email messages and settings\",\n rules: [\n \"GET /v1/users/{userId}/drafts\",\n \"GET /v1/users/{userId}/drafts/{id}\",\n \"GET /v1/users/{userId}/history\",\n \"GET /v1/users/{userId}/labels\",\n \"GET /v1/users/{userId}/labels/{id}\",\n \"GET /v1/users/{userId}/messages\",\n \"GET /v1/users/{userId}/messages/{id}\",\n \"GET /v1/users/{userId}/messages/{messageId}/attachments/{id}\",\n \"GET /v1/users/{userId}/profile\",\n \"GET /v1/users/{userId}/settings/autoForwarding\",\n \"GET /v1/users/{userId}/settings/cse/identities\",\n \"GET /v1/users/{userId}/settings/cse/identities/{cseEmailAddress}\",\n \"GET /v1/users/{userId}/settings/cse/keypairs\",\n \"GET /v1/users/{userId}/settings/cse/keypairs/{keyPairId}\",\n \"GET /v1/users/{userId}/settings/delegates\",\n \"GET /v1/users/{userId}/settings/delegates/{delegateEmail}\",\n \"GET /v1/users/{userId}/settings/filters\",\n \"GET /v1/users/{userId}/settings/filters/{id}\",\n \"GET /v1/users/{userId}/settings/forwardingAddresses\",\n \"GET /v1/users/{userId}/settings/forwardingAddresses/{forwardingEmail}\",\n \"GET /v1/users/{userId}/settings/imap\",\n \"GET /v1/users/{userId}/settings/language\",\n \"GET /v1/users/{userId}/settings/pop\",\n \"GET /v1/users/{userId}/settings/sendAs\",\n \"GET /v1/users/{userId}/settings/sendAs/{sendAsEmail}\",\n \"GET /v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo\",\n \"GET /v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}\",\n \"GET /v1/users/{userId}/settings/vacation\",\n \"POST /v1/users/{userId}/stop\",\n \"GET /v1/users/{userId}/threads\",\n \"GET /v1/users/{userId}/threads/{id}\",\n \"POST /v1/users/{userId}/watch\",\n ],\n },\n {\n name: \"gmail.send\",\n description: \"Send email on your behalf\",\n rules: [\"POST /v1/users/{userId}/messages/send\"],\n },\n {\n name: \"gmail.settings.basic\",\n description:\n \"See, edit, create, or change your email settings and filters in Gmail\",\n rules: [\n \"GET /v1/users/{userId}/settings/autoForwarding\",\n \"GET /v1/users/{userId}/settings/cse/identities\",\n \"POST /v1/users/{userId}/settings/cse/identities\",\n \"GET /v1/users/{userId}/settings/cse/identities/{cseEmailAddress}\",\n \"DELETE /v1/users/{userId}/settings/cse/identities/{cseEmailAddress}\",\n \"PATCH /v1/users/{userId}/settings/cse/identities/{emailAddress}\",\n \"GET /v1/users/{userId}/settings/cse/keypairs\",\n \"POST /v1/users/{userId}/settings/cse/keypairs\",\n \"GET /v1/users/{userId}/settings/cse/keypairs/{keyPairId}\",\n \"POST /v1/users/{userId}/settings/cse/keypairs/{keyPairId}:disable\",\n \"POST /v1/users/{userId}/settings/cse/keypairs/{keyPairId}:enable\",\n \"POST /v1/users/{userId}/settings/cse/keypairs/{keyPairId}:obliterate\",\n \"GET /v1/users/{userId}/settings/delegates\",\n \"GET /v1/users/{userId}/settings/delegates/{delegateEmail}\",\n \"GET /v1/users/{userId}/settings/filters\",\n \"POST /v1/users/{userId}/settings/filters\",\n \"GET /v1/users/{userId}/settings/filters/{id}\",\n \"DELETE /v1/users/{userId}/settings/filters/{id}\",\n \"GET /v1/users/{userId}/settings/forwardingAddresses\",\n \"GET /v1/users/{userId}/settings/forwardingAddresses/{forwardingEmail}\",\n \"GET /v1/users/{userId}/settings/imap\",\n \"PUT /v1/users/{userId}/settings/imap\",\n \"GET /v1/users/{userId}/settings/language\",\n \"PUT /v1/users/{userId}/settings/language\",\n \"GET /v1/users/{userId}/settings/pop\",\n \"PUT /v1/users/{userId}/settings/pop\",\n \"GET /v1/users/{userId}/settings/sendAs\",\n \"GET /v1/users/{userId}/settings/sendAs/{sendAsEmail}\",\n \"PUT /v1/users/{userId}/settings/sendAs/{sendAsEmail}\",\n \"PATCH /v1/users/{userId}/settings/sendAs/{sendAsEmail}\",\n \"GET /v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo\",\n \"POST /v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo\",\n \"GET /v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}\",\n \"DELETE /v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}\",\n \"POST /v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}/setDefault\",\n \"GET /v1/users/{userId}/settings/vacation\",\n \"PUT /v1/users/{userId}/settings/vacation\",\n ],\n },\n {\n name: \"gmail.settings.sharing\",\n description:\n \"Manage your sensitive mail settings, including who can manage your mail\",\n rules: [\n \"PUT /v1/users/{userId}/settings/autoForwarding\",\n \"GET /v1/users/{userId}/settings/cse/identities\",\n \"POST /v1/users/{userId}/settings/cse/identities\",\n \"GET /v1/users/{userId}/settings/cse/identities/{cseEmailAddress}\",\n \"DELETE /v1/users/{userId}/settings/cse/identities/{cseEmailAddress}\",\n \"PATCH /v1/users/{userId}/settings/cse/identities/{emailAddress}\",\n \"GET /v1/users/{userId}/settings/cse/keypairs\",\n \"POST /v1/users/{userId}/settings/cse/keypairs\",\n \"GET /v1/users/{userId}/settings/cse/keypairs/{keyPairId}\",\n \"POST /v1/users/{userId}/settings/cse/keypairs/{keyPairId}:disable\",\n \"POST /v1/users/{userId}/settings/cse/keypairs/{keyPairId}:enable\",\n \"POST /v1/users/{userId}/settings/cse/keypairs/{keyPairId}:obliterate\",\n \"POST /v1/users/{userId}/settings/delegates\",\n \"DELETE /v1/users/{userId}/settings/delegates/{delegateEmail}\",\n \"POST /v1/users/{userId}/settings/forwardingAddresses\",\n \"DELETE /v1/users/{userId}/settings/forwardingAddresses/{forwardingEmail}\",\n \"POST /v1/users/{userId}/settings/sendAs\",\n \"PUT /v1/users/{userId}/settings/sendAs/{sendAsEmail}\",\n \"PATCH /v1/users/{userId}/settings/sendAs/{sendAsEmail}\",\n \"DELETE /v1/users/{userId}/settings/sendAs/{sendAsEmail}\",\n \"GET /v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo\",\n \"POST /v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo\",\n \"GET /v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}\",\n \"DELETE /v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}\",\n \"POST /v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}/setDefault\",\n \"POST /v1/users/{userId}/settings/sendAs/{sendAsEmail}/verify\",\n ],\n },\n ],\n },\n {\n base: \"https://gmail.googleapis.com/upload/gmail\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.GMAIL_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"gmail\",\n description:\n \"Read, compose, send, and permanently delete all your email from Gmail\",\n rules: [\n \"POST /v1/users/{userId}/drafts\",\n \"POST /v1/users/{userId}/drafts/send\",\n \"PUT /v1/users/{userId}/drafts/{id}\",\n \"POST /v1/users/{userId}/messages\",\n \"POST /v1/users/{userId}/messages/import\",\n \"POST /v1/users/{userId}/messages/send\",\n ],\n },\n {\n name: \"gmail.addons.current.action.compose\",\n description:\n \"Manage drafts and send emails when you interact with the add-on\",\n rules: [\n \"POST /v1/users/{userId}/drafts\",\n \"POST /v1/users/{userId}/drafts/send\",\n \"PUT /v1/users/{userId}/drafts/{id}\",\n \"POST /v1/users/{userId}/messages/send\",\n ],\n },\n {\n name: \"gmail.compose\",\n description: \"Manage drafts and send emails\",\n rules: [\n \"POST /v1/users/{userId}/drafts\",\n \"POST /v1/users/{userId}/drafts/send\",\n \"PUT /v1/users/{userId}/drafts/{id}\",\n \"POST /v1/users/{userId}/messages/send\",\n ],\n },\n {\n name: \"gmail.insert\",\n description: \"Add emails into your Gmail mailbox\",\n rules: [\n \"POST /v1/users/{userId}/messages\",\n \"POST /v1/users/{userId}/messages/import\",\n ],\n },\n {\n name: \"gmail.modify\",\n description: \"Read, compose, and send emails from your Gmail account\",\n rules: [\n \"POST /v1/users/{userId}/drafts\",\n \"POST /v1/users/{userId}/drafts/send\",\n \"PUT /v1/users/{userId}/drafts/{id}\",\n \"POST /v1/users/{userId}/messages\",\n \"POST /v1/users/{userId}/messages/import\",\n \"POST /v1/users/{userId}/messages/send\",\n ],\n },\n {\n name: \"gmail.send\",\n description: \"Send email on your behalf\",\n rules: [\"POST /v1/users/{userId}/messages/send\"],\n },\n ],\n },\n {\n base: \"https://gmail.googleapis.com/resumable/upload/gmail\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.GMAIL_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"gmail\",\n description:\n \"Read, compose, send, and permanently delete all your email from Gmail\",\n rules: [\n \"POST /v1/users/{userId}/drafts\",\n \"POST /v1/users/{userId}/drafts/send\",\n \"PUT /v1/users/{userId}/drafts/{id}\",\n \"POST /v1/users/{userId}/messages\",\n \"POST /v1/users/{userId}/messages/import\",\n \"POST /v1/users/{userId}/messages/send\",\n ],\n },\n {\n name: \"gmail.addons.current.action.compose\",\n description:\n \"Manage drafts and send emails when you interact with the add-on\",\n rules: [\n \"POST /v1/users/{userId}/drafts\",\n \"POST /v1/users/{userId}/drafts/send\",\n \"PUT /v1/users/{userId}/drafts/{id}\",\n \"POST /v1/users/{userId}/messages/send\",\n ],\n },\n {\n name: \"gmail.compose\",\n description: \"Manage drafts and send emails\",\n rules: [\n \"POST /v1/users/{userId}/drafts\",\n \"POST /v1/users/{userId}/drafts/send\",\n \"PUT /v1/users/{userId}/drafts/{id}\",\n \"POST /v1/users/{userId}/messages/send\",\n ],\n },\n {\n name: \"gmail.insert\",\n description: \"Add emails into your Gmail mailbox\",\n rules: [\n \"POST /v1/users/{userId}/messages\",\n \"POST /v1/users/{userId}/messages/import\",\n ],\n },\n {\n name: \"gmail.modify\",\n description: \"Read, compose, and send emails from your Gmail account\",\n rules: [\n \"POST /v1/users/{userId}/drafts\",\n \"POST /v1/users/{userId}/drafts/send\",\n \"PUT /v1/users/{userId}/drafts/{id}\",\n \"POST /v1/users/{userId}/messages\",\n \"POST /v1/users/{userId}/messages/import\",\n \"POST /v1/users/{userId}/messages/send\",\n ],\n },\n {\n name: \"gmail.send\",\n description: \"Send email on your behalf\",\n rules: [\"POST /v1/users/{userId}/messages/send\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Google's Discovery API.\n// Source: https://www.googleapis.com/discovery/v1/apis/calendar/v3/rest\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:google-calendar\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const googleCalendarFirewall: FirewallConfig = {\n name: \"google-calendar\",\n description: \"Google Calendar API\",\n placeholders: {\n GOOGLE_CALENDAR_TOKEN:\n \"ya29.A0CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSa\",\n },\n apis: [\n {\n base: \"https://www.googleapis.com/calendar\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.GOOGLE_CALENDAR_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"calendar\",\n description:\n \"See, edit, share, and permanently delete all the calendars you can access using Google Calendar\",\n rules: [\n \"POST /v3/calendars\",\n \"GET /v3/calendars/{calendarId}\",\n \"PUT /v3/calendars/{calendarId}\",\n \"PATCH /v3/calendars/{calendarId}\",\n \"DELETE /v3/calendars/{calendarId}\",\n \"GET /v3/calendars/{calendarId}/acl\",\n \"POST /v3/calendars/{calendarId}/acl\",\n \"POST /v3/calendars/{calendarId}/acl/watch\",\n \"GET /v3/calendars/{calendarId}/acl/{ruleId}\",\n \"PUT /v3/calendars/{calendarId}/acl/{ruleId}\",\n \"PATCH /v3/calendars/{calendarId}/acl/{ruleId}\",\n \"DELETE /v3/calendars/{calendarId}/acl/{ruleId}\",\n \"POST /v3/calendars/{calendarId}/clear\",\n \"GET /v3/calendars/{calendarId}/events\",\n \"POST /v3/calendars/{calendarId}/events\",\n \"POST /v3/calendars/{calendarId}/events/import\",\n \"POST /v3/calendars/{calendarId}/events/quickAdd\",\n \"POST /v3/calendars/{calendarId}/events/watch\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}\",\n \"PUT /v3/calendars/{calendarId}/events/{eventId}\",\n \"PATCH /v3/calendars/{calendarId}/events/{eventId}\",\n \"DELETE /v3/calendars/{calendarId}/events/{eventId}\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}/instances\",\n \"POST /v3/calendars/{calendarId}/events/{eventId}/move\",\n \"POST /v3/channels/stop\",\n \"GET /v3/colors\",\n \"POST /v3/freeBusy\",\n \"GET /v3/users/me/calendarList\",\n \"POST /v3/users/me/calendarList\",\n \"POST /v3/users/me/calendarList/watch\",\n \"GET /v3/users/me/calendarList/{calendarId}\",\n \"PUT /v3/users/me/calendarList/{calendarId}\",\n \"PATCH /v3/users/me/calendarList/{calendarId}\",\n \"DELETE /v3/users/me/calendarList/{calendarId}\",\n \"GET /v3/users/me/settings\",\n \"POST /v3/users/me/settings/watch\",\n \"GET /v3/users/me/settings/{setting}\",\n ],\n },\n {\n name: \"calendar.acls\",\n description:\n \"See and change the sharing permissions of Google calendars you own\",\n rules: [\n \"GET /v3/calendars/{calendarId}/acl\",\n \"POST /v3/calendars/{calendarId}/acl\",\n \"POST /v3/calendars/{calendarId}/acl/watch\",\n \"GET /v3/calendars/{calendarId}/acl/{ruleId}\",\n \"PUT /v3/calendars/{calendarId}/acl/{ruleId}\",\n \"PATCH /v3/calendars/{calendarId}/acl/{ruleId}\",\n \"DELETE /v3/calendars/{calendarId}/acl/{ruleId}\",\n \"POST /v3/channels/stop\",\n ],\n },\n {\n name: \"calendar.acls.readonly\",\n description:\n \"See the sharing permissions of Google calendars you own\",\n rules: [\n \"GET /v3/calendars/{calendarId}/acl\",\n \"POST /v3/calendars/{calendarId}/acl/watch\",\n \"GET /v3/calendars/{calendarId}/acl/{ruleId}\",\n \"POST /v3/channels/stop\",\n ],\n },\n {\n name: \"calendar.app.created\",\n description:\n \"Make secondary Google calendars, and see, create, change, and delete events on them\",\n rules: [\n \"POST /v3/calendars\",\n \"GET /v3/calendars/{calendarId}\",\n \"PUT /v3/calendars/{calendarId}\",\n \"PATCH /v3/calendars/{calendarId}\",\n \"DELETE /v3/calendars/{calendarId}\",\n \"GET /v3/calendars/{calendarId}/events\",\n \"POST /v3/calendars/{calendarId}/events\",\n \"POST /v3/calendars/{calendarId}/events/import\",\n \"POST /v3/calendars/{calendarId}/events/quickAdd\",\n \"POST /v3/calendars/{calendarId}/events/watch\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}\",\n \"PUT /v3/calendars/{calendarId}/events/{eventId}\",\n \"PATCH /v3/calendars/{calendarId}/events/{eventId}\",\n \"DELETE /v3/calendars/{calendarId}/events/{eventId}\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}/instances\",\n \"POST /v3/channels/stop\",\n \"GET /v3/colors\",\n \"GET /v3/users/me/calendarList/{calendarId}\",\n \"PUT /v3/users/me/calendarList/{calendarId}\",\n \"PATCH /v3/users/me/calendarList/{calendarId}\",\n \"DELETE /v3/users/me/calendarList/{calendarId}\",\n ],\n },\n {\n name: \"calendar.calendarlist\",\n description:\n \"See, add, and remove Google calendars you’re subscribed to\",\n rules: [\n \"POST /v3/channels/stop\",\n \"GET /v3/colors\",\n \"GET /v3/users/me/calendarList\",\n \"POST /v3/users/me/calendarList\",\n \"POST /v3/users/me/calendarList/watch\",\n \"GET /v3/users/me/calendarList/{calendarId}\",\n \"PUT /v3/users/me/calendarList/{calendarId}\",\n \"PATCH /v3/users/me/calendarList/{calendarId}\",\n \"DELETE /v3/users/me/calendarList/{calendarId}\",\n ],\n },\n {\n name: \"calendar.calendarlist.readonly\",\n description: \"See the list of Google calendars you’re subscribed to\",\n rules: [\n \"POST /v3/channels/stop\",\n \"GET /v3/colors\",\n \"GET /v3/users/me/calendarList\",\n \"POST /v3/users/me/calendarList/watch\",\n \"GET /v3/users/me/calendarList/{calendarId}\",\n ],\n },\n {\n name: \"calendar.calendars\",\n description:\n \"See and change the properties of Google calendars you have access to, and create secondary calendars\",\n rules: [\n \"POST /v3/calendars\",\n \"GET /v3/calendars/{calendarId}\",\n \"PUT /v3/calendars/{calendarId}\",\n \"PATCH /v3/calendars/{calendarId}\",\n \"DELETE /v3/calendars/{calendarId}\",\n \"POST /v3/calendars/{calendarId}/clear\",\n ],\n },\n {\n name: \"calendar.calendars.readonly\",\n description:\n \"See the title, description, default time zone, and other properties of Google calendars you have access to\",\n rules: [\"GET /v3/calendars/{calendarId}\"],\n },\n {\n name: \"calendar.events\",\n description: \"View and edit events on all your calendars\",\n rules: [\n \"GET /v3/calendars/{calendarId}/events\",\n \"POST /v3/calendars/{calendarId}/events\",\n \"POST /v3/calendars/{calendarId}/events/import\",\n \"POST /v3/calendars/{calendarId}/events/quickAdd\",\n \"POST /v3/calendars/{calendarId}/events/watch\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}\",\n \"PUT /v3/calendars/{calendarId}/events/{eventId}\",\n \"PATCH /v3/calendars/{calendarId}/events/{eventId}\",\n \"DELETE /v3/calendars/{calendarId}/events/{eventId}\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}/instances\",\n \"POST /v3/calendars/{calendarId}/events/{eventId}/move\",\n \"POST /v3/channels/stop\",\n ],\n },\n {\n name: \"calendar.events.freebusy\",\n description:\n \"See the availability on Google calendars you have access to\",\n rules: [\n \"GET /v3/calendars/{calendarId}/events\",\n \"POST /v3/calendars/{calendarId}/events/watch\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}/instances\",\n \"POST /v3/channels/stop\",\n \"GET /v3/colors\",\n \"POST /v3/freeBusy\",\n ],\n },\n {\n name: \"calendar.events.owned\",\n description:\n \"See, create, change, and delete events on Google calendars you own\",\n rules: [\n \"GET /v3/calendars/{calendarId}/events\",\n \"POST /v3/calendars/{calendarId}/events\",\n \"POST /v3/calendars/{calendarId}/events/import\",\n \"POST /v3/calendars/{calendarId}/events/quickAdd\",\n \"POST /v3/calendars/{calendarId}/events/watch\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}\",\n \"PUT /v3/calendars/{calendarId}/events/{eventId}\",\n \"PATCH /v3/calendars/{calendarId}/events/{eventId}\",\n \"DELETE /v3/calendars/{calendarId}/events/{eventId}\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}/instances\",\n \"POST /v3/calendars/{calendarId}/events/{eventId}/move\",\n \"POST /v3/channels/stop\",\n \"GET /v3/colors\",\n ],\n },\n {\n name: \"calendar.events.owned.readonly\",\n description: \"See the events on Google calendars you own\",\n rules: [\n \"GET /v3/calendars/{calendarId}/events\",\n \"POST /v3/calendars/{calendarId}/events/watch\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}/instances\",\n \"POST /v3/channels/stop\",\n \"GET /v3/colors\",\n ],\n },\n {\n name: \"calendar.events.public.readonly\",\n description: \"See the events on public calendars\",\n rules: [\n \"GET /v3/calendars/{calendarId}/events\",\n \"POST /v3/calendars/{calendarId}/events/watch\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}/instances\",\n \"POST /v3/channels/stop\",\n \"GET /v3/colors\",\n ],\n },\n {\n name: \"calendar.events.readonly\",\n description: \"View events on all your calendars\",\n rules: [\n \"GET /v3/calendars/{calendarId}/events\",\n \"POST /v3/calendars/{calendarId}/events/watch\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}/instances\",\n \"POST /v3/channels/stop\",\n ],\n },\n {\n name: \"calendar.freebusy\",\n description: \"View your availability in your calendars\",\n rules: [\"POST /v3/freeBusy\"],\n },\n {\n name: \"calendar.readonly\",\n description:\n \"See and download any calendar you can access using your Google Calendar\",\n rules: [\n \"GET /v3/calendars/{calendarId}\",\n \"GET /v3/calendars/{calendarId}/acl/{ruleId}\",\n \"GET /v3/calendars/{calendarId}/events\",\n \"POST /v3/calendars/{calendarId}/events/watch\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}\",\n \"GET /v3/calendars/{calendarId}/events/{eventId}/instances\",\n \"POST /v3/channels/stop\",\n \"GET /v3/colors\",\n \"POST /v3/freeBusy\",\n \"GET /v3/users/me/calendarList\",\n \"POST /v3/users/me/calendarList/watch\",\n \"GET /v3/users/me/calendarList/{calendarId}\",\n \"GET /v3/users/me/settings\",\n \"POST /v3/users/me/settings/watch\",\n \"GET /v3/users/me/settings/{setting}\",\n ],\n },\n {\n name: \"calendar.settings.readonly\",\n description: \"View your Calendar settings\",\n rules: [\n \"POST /v3/channels/stop\",\n \"GET /v3/users/me/settings\",\n \"POST /v3/users/me/settings/watch\",\n \"GET /v3/users/me/settings/{setting}\",\n ],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Google's Discovery API.\n// Source: https://docs.googleapis.com/$discovery/rest?version=v1\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:google-docs\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const googleDocsFirewall: FirewallConfig = {\n name: \"google-docs\",\n description: \"Google Docs API\",\n placeholders: {\n GOOGLE_DOCS_TOKEN:\n \"ya29.A0CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSa\",\n },\n apis: [\n {\n base: \"https://docs.googleapis.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.GOOGLE_DOCS_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"documents\",\n description:\n \"See, edit, create, and delete all your Google Docs documents\",\n rules: [\n \"POST /v1/documents\",\n \"GET /v1/documents/{documentId}\",\n \"POST /v1/documents/{documentId}:batchUpdate\",\n ],\n },\n {\n name: \"documents.readonly\",\n description: \"See all your Google Docs documents\",\n rules: [\"GET /v1/documents/{documentId}\"],\n },\n {\n name: \"drive\",\n description:\n \"See, edit, create, and delete all of your Google Drive files\",\n rules: [\n \"POST /v1/documents\",\n \"GET /v1/documents/{documentId}\",\n \"POST /v1/documents/{documentId}:batchUpdate\",\n ],\n },\n {\n name: \"drive.file\",\n description:\n \"See, edit, create, and delete only the specific Google Drive files you use with this app\",\n rules: [\n \"POST /v1/documents\",\n \"GET /v1/documents/{documentId}\",\n \"POST /v1/documents/{documentId}:batchUpdate\",\n ],\n },\n {\n name: \"drive.readonly\",\n description: \"See and download all your Google Drive files\",\n rules: [\"GET /v1/documents/{documentId}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Google's Discovery API.\n// Source: https://www.googleapis.com/discovery/v1/apis/drive/v2/rest\n// Source: https://www.googleapis.com/discovery/v1/apis/drive/v3/rest\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:google-drive\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const googleDriveFirewall: FirewallConfig = {\n name: \"google-drive\",\n description: \"Google Drive API\",\n placeholders: {\n GOOGLE_DRIVE_TOKEN:\n \"ya29.A0CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSa\",\n },\n apis: [\n {\n base: \"https://www.googleapis.com/drive\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.GOOGLE_DRIVE_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"drive\",\n description:\n \"See, edit, create, and delete all of your Google Drive files\",\n rules: [\n \"GET /v2/about\",\n \"GET /v2/apps/{appId}\",\n \"GET /v2/changes\",\n \"GET /v2/changes/startPageToken\",\n \"POST /v2/changes/watch\",\n \"GET /v2/changes/{changeId}\",\n \"POST /v2/channels/stop\",\n \"GET /v2/drives\",\n \"POST /v2/drives\",\n \"GET /v2/drives/{driveId}\",\n \"PUT /v2/drives/{driveId}\",\n \"DELETE /v2/drives/{driveId}\",\n \"POST /v2/drives/{driveId}/hide\",\n \"POST /v2/drives/{driveId}/unhide\",\n \"GET /v2/files\",\n \"POST /v2/files\",\n \"GET /v2/files/generateIds\",\n \"DELETE /v2/files/trash\",\n \"GET /v2/files/{fileId}\",\n \"PUT /v2/files/{fileId}\",\n \"PATCH /v2/files/{fileId}\",\n \"DELETE /v2/files/{fileId}\",\n \"GET /v2/files/{fileId}/comments\",\n \"POST /v2/files/{fileId}/comments\",\n \"GET /v2/files/{fileId}/comments/{commentId}\",\n \"PUT /v2/files/{fileId}/comments/{commentId}\",\n \"PATCH /v2/files/{fileId}/comments/{commentId}\",\n \"DELETE /v2/files/{fileId}/comments/{commentId}\",\n \"GET /v2/files/{fileId}/comments/{commentId}/replies\",\n \"POST /v2/files/{fileId}/comments/{commentId}/replies\",\n \"GET /v2/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"PUT /v2/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"PATCH /v2/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"DELETE /v2/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"POST /v2/files/{fileId}/copy\",\n \"GET /v2/files/{fileId}/export\",\n \"GET /v2/files/{fileId}/listLabels\",\n \"POST /v2/files/{fileId}/modifyLabels\",\n \"GET /v2/files/{fileId}/parents\",\n \"POST /v2/files/{fileId}/parents\",\n \"GET /v2/files/{fileId}/parents/{parentId}\",\n \"DELETE /v2/files/{fileId}/parents/{parentId}\",\n \"GET /v2/files/{fileId}/permissions\",\n \"POST /v2/files/{fileId}/permissions\",\n \"GET /v2/files/{fileId}/permissions/{permissionId}\",\n \"PUT /v2/files/{fileId}/permissions/{permissionId}\",\n \"PATCH /v2/files/{fileId}/permissions/{permissionId}\",\n \"DELETE /v2/files/{fileId}/permissions/{permissionId}\",\n \"GET /v2/files/{fileId}/properties\",\n \"POST /v2/files/{fileId}/properties\",\n \"GET /v2/files/{fileId}/properties/{propertyKey}\",\n \"PUT /v2/files/{fileId}/properties/{propertyKey}\",\n \"PATCH /v2/files/{fileId}/properties/{propertyKey}\",\n \"DELETE /v2/files/{fileId}/properties/{propertyKey}\",\n \"GET /v2/files/{fileId}/revisions\",\n \"GET /v2/files/{fileId}/revisions/{revisionId}\",\n \"PUT /v2/files/{fileId}/revisions/{revisionId}\",\n \"PATCH /v2/files/{fileId}/revisions/{revisionId}\",\n \"DELETE /v2/files/{fileId}/revisions/{revisionId}\",\n \"POST /v2/files/{fileId}/touch\",\n \"POST /v2/files/{fileId}/trash\",\n \"POST /v2/files/{fileId}/untrash\",\n \"POST /v2/files/{fileId}/watch\",\n \"GET /v2/files/{folderId}/children\",\n \"POST /v2/files/{folderId}/children\",\n \"GET /v2/files/{folderId}/children/{childId}\",\n \"DELETE /v2/files/{folderId}/children/{childId}\",\n \"GET /v2/permissionIds/{email}\",\n \"GET /v2/teamdrives\",\n \"POST /v2/teamdrives\",\n \"GET /v2/teamdrives/{teamDriveId}\",\n \"PUT /v2/teamdrives/{teamDriveId}\",\n \"DELETE /v2/teamdrives/{teamDriveId}\",\n \"GET /v3/about\",\n \"GET /v3/apps/{appId}\",\n \"GET /v3/changes\",\n \"GET /v3/changes/startPageToken\",\n \"POST /v3/changes/watch\",\n \"POST /v3/channels/stop\",\n \"GET /v3/drives\",\n \"POST /v3/drives\",\n \"GET /v3/drives/{driveId}\",\n \"PATCH /v3/drives/{driveId}\",\n \"DELETE /v3/drives/{driveId}\",\n \"POST /v3/drives/{driveId}/hide\",\n \"POST /v3/drives/{driveId}/unhide\",\n \"GET /v3/files\",\n \"POST /v3/files\",\n \"GET /v3/files/generateIds\",\n \"DELETE /v3/files/trash\",\n \"GET /v3/files/{fileId}\",\n \"PATCH /v3/files/{fileId}\",\n \"DELETE /v3/files/{fileId}\",\n \"GET /v3/files/{fileId}/accessproposals\",\n \"GET /v3/files/{fileId}/accessproposals/{proposalId}\",\n \"POST /v3/files/{fileId}/accessproposals/{proposalId}:resolve\",\n \"GET /v3/files/{fileId}/approvals\",\n \"GET /v3/files/{fileId}/approvals/{approvalId}\",\n \"GET /v3/files/{fileId}/comments\",\n \"POST /v3/files/{fileId}/comments\",\n \"GET /v3/files/{fileId}/comments/{commentId}\",\n \"PATCH /v3/files/{fileId}/comments/{commentId}\",\n \"DELETE /v3/files/{fileId}/comments/{commentId}\",\n \"GET /v3/files/{fileId}/comments/{commentId}/replies\",\n \"POST /v3/files/{fileId}/comments/{commentId}/replies\",\n \"GET /v3/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"PATCH /v3/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"DELETE /v3/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"POST /v3/files/{fileId}/copy\",\n \"POST /v3/files/{fileId}/download\",\n \"GET /v3/files/{fileId}/export\",\n \"GET /v3/files/{fileId}/listLabels\",\n \"POST /v3/files/{fileId}/modifyLabels\",\n \"GET /v3/files/{fileId}/permissions\",\n \"POST /v3/files/{fileId}/permissions\",\n \"GET /v3/files/{fileId}/permissions/{permissionId}\",\n \"PATCH /v3/files/{fileId}/permissions/{permissionId}\",\n \"DELETE /v3/files/{fileId}/permissions/{permissionId}\",\n \"GET /v3/files/{fileId}/revisions\",\n \"GET /v3/files/{fileId}/revisions/{revisionId}\",\n \"PATCH /v3/files/{fileId}/revisions/{revisionId}\",\n \"DELETE /v3/files/{fileId}/revisions/{revisionId}\",\n \"POST /v3/files/{fileId}/watch\",\n \"GET /v3/operations/{name}\",\n \"GET /v3/teamdrives\",\n \"POST /v3/teamdrives\",\n \"GET /v3/teamdrives/{teamDriveId}\",\n \"PATCH /v3/teamdrives/{teamDriveId}\",\n \"DELETE /v3/teamdrives/{teamDriveId}\",\n ],\n },\n {\n name: \"drive.appdata\",\n description:\n \"See, create, and delete its own configuration data in your Google Drive\",\n rules: [\n \"GET /v2/about\",\n \"GET /v2/apps/{appId}\",\n \"GET /v2/changes\",\n \"GET /v2/changes/startPageToken\",\n \"POST /v2/changes/watch\",\n \"GET /v2/changes/{changeId}\",\n \"POST /v2/channels/stop\",\n \"GET /v2/files\",\n \"POST /v2/files\",\n \"GET /v2/files/generateIds\",\n \"GET /v2/files/{fileId}\",\n \"PUT /v2/files/{fileId}\",\n \"PATCH /v2/files/{fileId}\",\n \"DELETE /v2/files/{fileId}\",\n \"POST /v2/files/{fileId}/copy\",\n \"GET /v2/files/{fileId}/parents\",\n \"POST /v2/files/{fileId}/parents\",\n \"GET /v2/files/{fileId}/parents/{parentId}\",\n \"GET /v2/files/{fileId}/properties\",\n \"POST /v2/files/{fileId}/properties\",\n \"GET /v2/files/{fileId}/properties/{propertyKey}\",\n \"PUT /v2/files/{fileId}/properties/{propertyKey}\",\n \"PATCH /v2/files/{fileId}/properties/{propertyKey}\",\n \"DELETE /v2/files/{fileId}/properties/{propertyKey}\",\n \"GET /v2/files/{fileId}/revisions\",\n \"GET /v2/files/{fileId}/revisions/{revisionId}\",\n \"PUT /v2/files/{fileId}/revisions/{revisionId}\",\n \"PATCH /v2/files/{fileId}/revisions/{revisionId}\",\n \"DELETE /v2/files/{fileId}/revisions/{revisionId}\",\n \"POST /v2/files/{fileId}/touch\",\n \"POST /v2/files/{fileId}/trash\",\n \"POST /v2/files/{fileId}/untrash\",\n \"POST /v2/files/{fileId}/watch\",\n \"GET /v2/files/{folderId}/children\",\n \"POST /v2/files/{folderId}/children\",\n \"GET /v2/files/{folderId}/children/{childId}\",\n \"GET /v2/permissionIds/{email}\",\n \"GET /v3/about\",\n \"GET /v3/apps/{appId}\",\n \"GET /v3/changes\",\n \"GET /v3/changes/startPageToken\",\n \"POST /v3/changes/watch\",\n \"POST /v3/channels/stop\",\n \"GET /v3/files\",\n \"POST /v3/files\",\n \"GET /v3/files/generateIds\",\n \"GET /v3/files/{fileId}\",\n \"PATCH /v3/files/{fileId}\",\n \"DELETE /v3/files/{fileId}\",\n \"GET /v3/files/{fileId}/approvals\",\n \"GET /v3/files/{fileId}/approvals/{approvalId}\",\n \"POST /v3/files/{fileId}/copy\",\n \"GET /v3/files/{fileId}/revisions\",\n \"GET /v3/files/{fileId}/revisions/{revisionId}\",\n \"PATCH /v3/files/{fileId}/revisions/{revisionId}\",\n \"DELETE /v3/files/{fileId}/revisions/{revisionId}\",\n \"POST /v3/files/{fileId}/watch\",\n ],\n },\n {\n name: \"drive.apps.readonly\",\n description: \"View your Google Drive apps\",\n rules: [\n \"GET /v2/apps\",\n \"GET /v2/apps/{appId}\",\n \"GET /v2/changes\",\n \"GET /v2/changes/startPageToken\",\n \"POST /v2/changes/watch\",\n \"GET /v2/changes/{changeId}\",\n \"POST /v2/channels/stop\",\n \"GET /v2/files\",\n \"POST /v2/files\",\n \"PUT /v2/files/{fileId}\",\n \"PATCH /v2/files/{fileId}\",\n \"POST /v2/files/{fileId}/copy\",\n \"POST /v2/files/{fileId}/touch\",\n \"POST /v2/files/{fileId}/trash\",\n \"POST /v2/files/{fileId}/untrash\",\n \"GET /v2/permissionIds/{email}\",\n \"GET /v3/apps\",\n \"GET /v3/apps/{appId}\",\n ],\n },\n {\n name: \"drive.file\",\n description:\n \"See, edit, create, and delete only the specific Google Drive files you use with this app\",\n rules: [\n \"GET /v2/about\",\n \"GET /v2/apps/{appId}\",\n \"GET /v2/changes\",\n \"GET /v2/changes/startPageToken\",\n \"POST /v2/changes/watch\",\n \"GET /v2/changes/{changeId}\",\n \"POST /v2/channels/stop\",\n \"GET /v2/files\",\n \"POST /v2/files\",\n \"GET /v2/files/generateIds\",\n \"GET /v2/files/{fileId}\",\n \"PUT /v2/files/{fileId}\",\n \"PATCH /v2/files/{fileId}\",\n \"DELETE /v2/files/{fileId}\",\n \"GET /v2/files/{fileId}/comments\",\n \"POST /v2/files/{fileId}/comments\",\n \"GET /v2/files/{fileId}/comments/{commentId}\",\n \"PUT /v2/files/{fileId}/comments/{commentId}\",\n \"PATCH /v2/files/{fileId}/comments/{commentId}\",\n \"DELETE /v2/files/{fileId}/comments/{commentId}\",\n \"GET /v2/files/{fileId}/comments/{commentId}/replies\",\n \"POST /v2/files/{fileId}/comments/{commentId}/replies\",\n \"GET /v2/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"PUT /v2/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"PATCH /v2/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"DELETE /v2/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"POST /v2/files/{fileId}/copy\",\n \"GET /v2/files/{fileId}/export\",\n \"GET /v2/files/{fileId}/listLabels\",\n \"POST /v2/files/{fileId}/modifyLabels\",\n \"GET /v2/files/{fileId}/parents\",\n \"POST /v2/files/{fileId}/parents\",\n \"GET /v2/files/{fileId}/parents/{parentId}\",\n \"DELETE /v2/files/{fileId}/parents/{parentId}\",\n \"GET /v2/files/{fileId}/permissions\",\n \"POST /v2/files/{fileId}/permissions\",\n \"GET /v2/files/{fileId}/permissions/{permissionId}\",\n \"PUT /v2/files/{fileId}/permissions/{permissionId}\",\n \"PATCH /v2/files/{fileId}/permissions/{permissionId}\",\n \"DELETE /v2/files/{fileId}/permissions/{permissionId}\",\n \"GET /v2/files/{fileId}/properties\",\n \"POST /v2/files/{fileId}/properties\",\n \"GET /v2/files/{fileId}/properties/{propertyKey}\",\n \"PUT /v2/files/{fileId}/properties/{propertyKey}\",\n \"PATCH /v2/files/{fileId}/properties/{propertyKey}\",\n \"DELETE /v2/files/{fileId}/properties/{propertyKey}\",\n \"GET /v2/files/{fileId}/revisions\",\n \"GET /v2/files/{fileId}/revisions/{revisionId}\",\n \"PUT /v2/files/{fileId}/revisions/{revisionId}\",\n \"PATCH /v2/files/{fileId}/revisions/{revisionId}\",\n \"DELETE /v2/files/{fileId}/revisions/{revisionId}\",\n \"POST /v2/files/{fileId}/touch\",\n \"POST /v2/files/{fileId}/trash\",\n \"POST /v2/files/{fileId}/untrash\",\n \"POST /v2/files/{fileId}/watch\",\n \"GET /v2/files/{folderId}/children\",\n \"POST /v2/files/{folderId}/children\",\n \"GET /v2/files/{folderId}/children/{childId}\",\n \"DELETE /v2/files/{folderId}/children/{childId}\",\n \"GET /v2/permissionIds/{email}\",\n \"GET /v3/about\",\n \"GET /v3/apps/{appId}\",\n \"GET /v3/changes\",\n \"GET /v3/changes/startPageToken\",\n \"POST /v3/changes/watch\",\n \"POST /v3/channels/stop\",\n \"GET /v3/files\",\n \"POST /v3/files\",\n \"GET /v3/files/generateIds\",\n \"GET /v3/files/{fileId}\",\n \"PATCH /v3/files/{fileId}\",\n \"DELETE /v3/files/{fileId}\",\n \"GET /v3/files/{fileId}/accessproposals\",\n \"GET /v3/files/{fileId}/accessproposals/{proposalId}\",\n \"POST /v3/files/{fileId}/accessproposals/{proposalId}:resolve\",\n \"GET /v3/files/{fileId}/approvals\",\n \"GET /v3/files/{fileId}/approvals/{approvalId}\",\n \"GET /v3/files/{fileId}/comments\",\n \"POST /v3/files/{fileId}/comments\",\n \"GET /v3/files/{fileId}/comments/{commentId}\",\n \"PATCH /v3/files/{fileId}/comments/{commentId}\",\n \"DELETE /v3/files/{fileId}/comments/{commentId}\",\n \"GET /v3/files/{fileId}/comments/{commentId}/replies\",\n \"POST /v3/files/{fileId}/comments/{commentId}/replies\",\n \"GET /v3/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"PATCH /v3/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"DELETE /v3/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"POST /v3/files/{fileId}/copy\",\n \"POST /v3/files/{fileId}/download\",\n \"GET /v3/files/{fileId}/export\",\n \"GET /v3/files/{fileId}/listLabels\",\n \"POST /v3/files/{fileId}/modifyLabels\",\n \"GET /v3/files/{fileId}/permissions\",\n \"POST /v3/files/{fileId}/permissions\",\n \"GET /v3/files/{fileId}/permissions/{permissionId}\",\n \"PATCH /v3/files/{fileId}/permissions/{permissionId}\",\n \"DELETE /v3/files/{fileId}/permissions/{permissionId}\",\n \"GET /v3/files/{fileId}/revisions\",\n \"GET /v3/files/{fileId}/revisions/{revisionId}\",\n \"PATCH /v3/files/{fileId}/revisions/{revisionId}\",\n \"DELETE /v3/files/{fileId}/revisions/{revisionId}\",\n \"POST /v3/files/{fileId}/watch\",\n \"GET /v3/operations/{name}\",\n ],\n },\n {\n name: \"drive.meet.readonly\",\n description:\n \"See and download your Google Drive files that were created or edited by Google Meet.\",\n rules: [\n \"GET /v2/changes\",\n \"GET /v2/changes/startPageToken\",\n \"POST /v2/changes/watch\",\n \"GET /v2/changes/{changeId}\",\n \"POST /v2/channels/stop\",\n \"GET /v2/files\",\n \"GET /v2/files/{fileId}\",\n \"GET /v2/files/{fileId}/comments\",\n \"GET /v2/files/{fileId}/comments/{commentId}\",\n \"GET /v2/files/{fileId}/comments/{commentId}/replies\",\n \"GET /v2/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"GET /v2/files/{fileId}/export\",\n \"GET /v2/files/{fileId}/listLabels\",\n \"GET /v2/files/{fileId}/parents\",\n \"GET /v2/files/{fileId}/parents/{parentId}\",\n \"GET /v2/files/{fileId}/permissions\",\n \"GET /v2/files/{fileId}/permissions/{permissionId}\",\n \"GET /v2/files/{fileId}/properties\",\n \"GET /v2/files/{fileId}/properties/{propertyKey}\",\n \"GET /v2/files/{fileId}/revisions\",\n \"GET /v2/files/{fileId}/revisions/{revisionId}\",\n \"POST /v2/files/{fileId}/watch\",\n \"GET /v2/files/{folderId}/children\",\n \"GET /v2/files/{folderId}/children/{childId}\",\n \"GET /v3/changes\",\n \"GET /v3/changes/startPageToken\",\n \"POST /v3/changes/watch\",\n \"POST /v3/channels/stop\",\n \"GET /v3/files\",\n \"GET /v3/files/{fileId}\",\n \"GET /v3/files/{fileId}/comments\",\n \"GET /v3/files/{fileId}/comments/{commentId}\",\n \"GET /v3/files/{fileId}/comments/{commentId}/replies\",\n \"GET /v3/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"GET /v3/files/{fileId}/export\",\n \"GET /v3/files/{fileId}/listLabels\",\n \"GET /v3/files/{fileId}/permissions\",\n \"GET /v3/files/{fileId}/permissions/{permissionId}\",\n \"GET /v3/files/{fileId}/revisions\",\n \"GET /v3/files/{fileId}/revisions/{revisionId}\",\n \"POST /v3/files/{fileId}/watch\",\n \"GET /v3/operations/{name}\",\n ],\n },\n {\n name: \"drive.metadata\",\n description: \"View and manage metadata of files in your Google Drive\",\n rules: [\n \"GET /v2/about\",\n \"GET /v2/apps/{appId}\",\n \"GET /v2/changes\",\n \"GET /v2/changes/startPageToken\",\n \"POST /v2/changes/watch\",\n \"GET /v2/changes/{changeId}\",\n \"POST /v2/channels/stop\",\n \"GET /v2/files\",\n \"GET /v2/files/{fileId}\",\n \"PUT /v2/files/{fileId}\",\n \"PATCH /v2/files/{fileId}\",\n \"GET /v2/files/{fileId}/listLabels\",\n \"POST /v2/files/{fileId}/modifyLabels\",\n \"GET /v2/files/{fileId}/parents\",\n \"GET /v2/files/{fileId}/parents/{parentId}\",\n \"GET /v2/files/{fileId}/permissions\",\n \"GET /v2/files/{fileId}/permissions/{permissionId}\",\n \"GET /v2/files/{fileId}/properties\",\n \"POST /v2/files/{fileId}/properties\",\n \"GET /v2/files/{fileId}/properties/{propertyKey}\",\n \"PUT /v2/files/{fileId}/properties/{propertyKey}\",\n \"PATCH /v2/files/{fileId}/properties/{propertyKey}\",\n \"DELETE /v2/files/{fileId}/properties/{propertyKey}\",\n \"GET /v2/files/{fileId}/revisions\",\n \"GET /v2/files/{fileId}/revisions/{revisionId}\",\n \"POST /v2/files/{fileId}/touch\",\n \"POST /v2/files/{fileId}/watch\",\n \"GET /v2/files/{folderId}/children\",\n \"GET /v2/files/{folderId}/children/{childId}\",\n \"GET /v2/permissionIds/{email}\",\n \"GET /v3/about\",\n \"GET /v3/apps/{appId}\",\n \"GET /v3/changes\",\n \"GET /v3/changes/startPageToken\",\n \"POST /v3/changes/watch\",\n \"POST /v3/channels/stop\",\n \"GET /v3/files\",\n \"GET /v3/files/{fileId}\",\n \"PATCH /v3/files/{fileId}\",\n \"GET /v3/files/{fileId}/accessproposals\",\n \"GET /v3/files/{fileId}/accessproposals/{proposalId}\",\n \"GET /v3/files/{fileId}/approvals\",\n \"GET /v3/files/{fileId}/approvals/{approvalId}\",\n \"GET /v3/files/{fileId}/listLabels\",\n \"POST /v3/files/{fileId}/modifyLabels\",\n \"GET /v3/files/{fileId}/permissions\",\n \"GET /v3/files/{fileId}/permissions/{permissionId}\",\n \"GET /v3/files/{fileId}/revisions\",\n \"GET /v3/files/{fileId}/revisions/{revisionId}\",\n \"POST /v3/files/{fileId}/watch\",\n ],\n },\n {\n name: \"drive.metadata.readonly\",\n description: \"See information about your Google Drive files\",\n rules: [\n \"GET /v2/about\",\n \"GET /v2/apps/{appId}\",\n \"GET /v2/changes\",\n \"GET /v2/changes/startPageToken\",\n \"POST /v2/changes/watch\",\n \"GET /v2/changes/{changeId}\",\n \"POST /v2/channels/stop\",\n \"GET /v2/files\",\n \"GET /v2/files/{fileId}\",\n \"GET /v2/files/{fileId}/listLabels\",\n \"GET /v2/files/{fileId}/parents\",\n \"GET /v2/files/{fileId}/parents/{parentId}\",\n \"GET /v2/files/{fileId}/permissions\",\n \"GET /v2/files/{fileId}/permissions/{permissionId}\",\n \"GET /v2/files/{fileId}/properties\",\n \"GET /v2/files/{fileId}/properties/{propertyKey}\",\n \"GET /v2/files/{fileId}/revisions\",\n \"GET /v2/files/{fileId}/revisions/{revisionId}\",\n \"POST /v2/files/{fileId}/watch\",\n \"GET /v2/files/{folderId}/children\",\n \"GET /v2/files/{folderId}/children/{childId}\",\n \"GET /v2/permissionIds/{email}\",\n \"GET /v3/about\",\n \"GET /v3/apps/{appId}\",\n \"GET /v3/changes\",\n \"GET /v3/changes/startPageToken\",\n \"POST /v3/changes/watch\",\n \"POST /v3/channels/stop\",\n \"GET /v3/files\",\n \"GET /v3/files/{fileId}\",\n \"GET /v3/files/{fileId}/accessproposals\",\n \"GET /v3/files/{fileId}/accessproposals/{proposalId}\",\n \"GET /v3/files/{fileId}/approvals\",\n \"GET /v3/files/{fileId}/approvals/{approvalId}\",\n \"GET /v3/files/{fileId}/listLabels\",\n \"GET /v3/files/{fileId}/permissions\",\n \"GET /v3/files/{fileId}/permissions/{permissionId}\",\n \"GET /v3/files/{fileId}/revisions\",\n \"GET /v3/files/{fileId}/revisions/{revisionId}\",\n \"POST /v3/files/{fileId}/watch\",\n ],\n },\n {\n name: \"drive.photos.readonly\",\n description:\n \"View the photos, videos and albums in your Google Photos\",\n rules: [\n \"GET /v2/about\",\n \"GET /v2/changes\",\n \"GET /v2/changes/startPageToken\",\n \"POST /v2/changes/watch\",\n \"GET /v2/changes/{changeId}\",\n \"POST /v2/channels/stop\",\n \"GET /v2/files\",\n \"GET /v2/files/{fileId}\",\n \"POST /v2/files/{fileId}/copy\",\n \"GET /v2/files/{fileId}/parents\",\n \"GET /v2/files/{fileId}/parents/{parentId}\",\n \"GET /v2/files/{fileId}/permissions\",\n \"GET /v2/files/{fileId}/permissions/{permissionId}\",\n \"GET /v2/files/{fileId}/properties\",\n \"GET /v2/files/{fileId}/properties/{propertyKey}\",\n \"GET /v2/files/{fileId}/revisions\",\n \"GET /v2/files/{fileId}/revisions/{revisionId}\",\n \"POST /v2/files/{fileId}/watch\",\n \"GET /v2/files/{folderId}/children\",\n \"GET /v2/files/{folderId}/children/{childId}\",\n \"GET /v2/permissionIds/{email}\",\n \"GET /v3/about\",\n \"GET /v3/changes\",\n \"GET /v3/changes/startPageToken\",\n \"POST /v3/changes/watch\",\n \"POST /v3/channels/stop\",\n \"GET /v3/files\",\n \"GET /v3/files/{fileId}\",\n \"POST /v3/files/{fileId}/copy\",\n \"GET /v3/files/{fileId}/permissions\",\n \"GET /v3/files/{fileId}/permissions/{permissionId}\",\n \"GET /v3/files/{fileId}/revisions\",\n \"GET /v3/files/{fileId}/revisions/{revisionId}\",\n \"POST /v3/files/{fileId}/watch\",\n ],\n },\n {\n name: \"drive.readonly\",\n description: \"See and download all your Google Drive files\",\n rules: [\n \"GET /v2/about\",\n \"GET /v2/apps/{appId}\",\n \"GET /v2/changes\",\n \"GET /v2/changes/startPageToken\",\n \"POST /v2/changes/watch\",\n \"GET /v2/changes/{changeId}\",\n \"POST /v2/channels/stop\",\n \"GET /v2/drives\",\n \"GET /v2/drives/{driveId}\",\n \"GET /v2/files\",\n \"GET /v2/files/{fileId}\",\n \"GET /v2/files/{fileId}/comments\",\n \"GET /v2/files/{fileId}/comments/{commentId}\",\n \"GET /v2/files/{fileId}/comments/{commentId}/replies\",\n \"GET /v2/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"GET /v2/files/{fileId}/export\",\n \"GET /v2/files/{fileId}/listLabels\",\n \"GET /v2/files/{fileId}/parents\",\n \"GET /v2/files/{fileId}/parents/{parentId}\",\n \"GET /v2/files/{fileId}/permissions\",\n \"GET /v2/files/{fileId}/permissions/{permissionId}\",\n \"GET /v2/files/{fileId}/properties\",\n \"GET /v2/files/{fileId}/properties/{propertyKey}\",\n \"GET /v2/files/{fileId}/revisions\",\n \"GET /v2/files/{fileId}/revisions/{revisionId}\",\n \"POST /v2/files/{fileId}/watch\",\n \"GET /v2/files/{folderId}/children\",\n \"GET /v2/files/{folderId}/children/{childId}\",\n \"GET /v2/permissionIds/{email}\",\n \"GET /v2/teamdrives\",\n \"GET /v2/teamdrives/{teamDriveId}\",\n \"GET /v3/about\",\n \"GET /v3/apps/{appId}\",\n \"GET /v3/changes\",\n \"GET /v3/changes/startPageToken\",\n \"POST /v3/changes/watch\",\n \"POST /v3/channels/stop\",\n \"GET /v3/drives\",\n \"GET /v3/drives/{driveId}\",\n \"GET /v3/files\",\n \"GET /v3/files/{fileId}\",\n \"GET /v3/files/{fileId}/accessproposals\",\n \"GET /v3/files/{fileId}/accessproposals/{proposalId}\",\n \"GET /v3/files/{fileId}/approvals\",\n \"GET /v3/files/{fileId}/approvals/{approvalId}\",\n \"GET /v3/files/{fileId}/comments\",\n \"GET /v3/files/{fileId}/comments/{commentId}\",\n \"GET /v3/files/{fileId}/comments/{commentId}/replies\",\n \"GET /v3/files/{fileId}/comments/{commentId}/replies/{replyId}\",\n \"POST /v3/files/{fileId}/download\",\n \"GET /v3/files/{fileId}/export\",\n \"GET /v3/files/{fileId}/listLabels\",\n \"GET /v3/files/{fileId}/permissions\",\n \"GET /v3/files/{fileId}/permissions/{permissionId}\",\n \"GET /v3/files/{fileId}/revisions\",\n \"GET /v3/files/{fileId}/revisions/{revisionId}\",\n \"POST /v3/files/{fileId}/watch\",\n \"GET /v3/operations/{name}\",\n \"GET /v3/teamdrives\",\n \"GET /v3/teamdrives/{teamDriveId}\",\n ],\n },\n {\n name: \"drive.scripts\",\n description: \"Modify your Google Apps Script scripts' behavior\",\n rules: [\n \"PUT /v2/files/{fileId}\",\n \"PATCH /v2/files/{fileId}\",\n \"PATCH /v3/files/{fileId}\",\n ],\n },\n ],\n },\n {\n base: \"https://www.googleapis.com/upload/drive\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.GOOGLE_DRIVE_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"drive\",\n description:\n \"See, edit, create, and delete all of your Google Drive files\",\n rules: [\n \"POST /v2/files\",\n \"PUT /v2/files/{fileId}\",\n \"POST /v3/files\",\n \"PATCH /v3/files/{fileId}\",\n ],\n },\n {\n name: \"drive.appdata\",\n description:\n \"See, create, and delete its own configuration data in your Google Drive\",\n rules: [\n \"POST /v2/files\",\n \"PUT /v2/files/{fileId}\",\n \"POST /v3/files\",\n \"PATCH /v3/files/{fileId}\",\n ],\n },\n {\n name: \"drive.apps.readonly\",\n description: \"View your Google Drive apps\",\n rules: [\"POST /v2/files\", \"PUT /v2/files/{fileId}\"],\n },\n {\n name: \"drive.file\",\n description:\n \"See, edit, create, and delete only the specific Google Drive files you use with this app\",\n rules: [\n \"POST /v2/files\",\n \"PUT /v2/files/{fileId}\",\n \"POST /v3/files\",\n \"PATCH /v3/files/{fileId}\",\n ],\n },\n {\n name: \"drive.metadata\",\n description: \"View and manage metadata of files in your Google Drive\",\n rules: [\"PUT /v2/files/{fileId}\", \"PATCH /v3/files/{fileId}\"],\n },\n {\n name: \"drive.scripts\",\n description: \"Modify your Google Apps Script scripts' behavior\",\n rules: [\"PUT /v2/files/{fileId}\", \"PATCH /v3/files/{fileId}\"],\n },\n ],\n },\n {\n base: \"https://www.googleapis.com/resumable/upload/drive\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.GOOGLE_DRIVE_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"drive\",\n description:\n \"See, edit, create, and delete all of your Google Drive files\",\n rules: [\n \"POST /v2/files\",\n \"PUT /v2/files/{fileId}\",\n \"POST /v3/files\",\n \"PATCH /v3/files/{fileId}\",\n ],\n },\n {\n name: \"drive.appdata\",\n description:\n \"See, create, and delete its own configuration data in your Google Drive\",\n rules: [\n \"POST /v2/files\",\n \"PUT /v2/files/{fileId}\",\n \"POST /v3/files\",\n \"PATCH /v3/files/{fileId}\",\n ],\n },\n {\n name: \"drive.apps.readonly\",\n description: \"View your Google Drive apps\",\n rules: [\"POST /v2/files\", \"PUT /v2/files/{fileId}\"],\n },\n {\n name: \"drive.file\",\n description:\n \"See, edit, create, and delete only the specific Google Drive files you use with this app\",\n rules: [\n \"POST /v2/files\",\n \"PUT /v2/files/{fileId}\",\n \"POST /v3/files\",\n \"PATCH /v3/files/{fileId}\",\n ],\n },\n {\n name: \"drive.metadata\",\n description: \"View and manage metadata of files in your Google Drive\",\n rules: [\"PUT /v2/files/{fileId}\", \"PATCH /v3/files/{fileId}\"],\n },\n {\n name: \"drive.scripts\",\n description: \"Modify your Google Apps Script scripts' behavior\",\n rules: [\"PUT /v2/files/{fileId}\", \"PATCH /v3/files/{fileId}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Google's Discovery API.\n// Source: https://sheets.googleapis.com/$discovery/rest?version=v4\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:google-sheets\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const googleSheetsFirewall: FirewallConfig = {\n name: \"google-sheets\",\n description: \"Google Sheets API\",\n placeholders: {\n GOOGLE_SHEETS_TOKEN:\n \"ya29.A0CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSa\",\n },\n apis: [\n {\n base: \"https://sheets.googleapis.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.GOOGLE_SHEETS_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"drive\",\n description:\n \"See, edit, create, and delete all of your Google Drive files\",\n rules: [\n \"POST /v4/spreadsheets\",\n \"GET /v4/spreadsheets/{spreadsheetId}\",\n \"GET /v4/spreadsheets/{spreadsheetId}/developerMetadata/{metadataId}\",\n \"POST /v4/spreadsheets/{spreadsheetId}/developerMetadata:search\",\n \"POST /v4/spreadsheets/{spreadsheetId}/sheets/{sheetId}:copyTo\",\n \"GET /v4/spreadsheets/{spreadsheetId}/values/{range}\",\n \"PUT /v4/spreadsheets/{spreadsheetId}/values/{range}\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values/{range}:append\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values/{range}:clear\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values:batchClear\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values:batchClearByDataFilter\",\n \"GET /v4/spreadsheets/{spreadsheetId}/values:batchGet\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values:batchGetByDataFilter\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values:batchUpdate\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values:batchUpdateByDataFilter\",\n \"POST /v4/spreadsheets/{spreadsheetId}:batchUpdate\",\n \"POST /v4/spreadsheets/{spreadsheetId}:getByDataFilter\",\n ],\n },\n {\n name: \"drive.file\",\n description:\n \"See, edit, create, and delete only the specific Google Drive files you use with this app\",\n rules: [\n \"POST /v4/spreadsheets\",\n \"GET /v4/spreadsheets/{spreadsheetId}\",\n \"GET /v4/spreadsheets/{spreadsheetId}/developerMetadata/{metadataId}\",\n \"POST /v4/spreadsheets/{spreadsheetId}/developerMetadata:search\",\n \"POST /v4/spreadsheets/{spreadsheetId}/sheets/{sheetId}:copyTo\",\n \"GET /v4/spreadsheets/{spreadsheetId}/values/{range}\",\n \"PUT /v4/spreadsheets/{spreadsheetId}/values/{range}\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values/{range}:append\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values/{range}:clear\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values:batchClear\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values:batchClearByDataFilter\",\n \"GET /v4/spreadsheets/{spreadsheetId}/values:batchGet\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values:batchGetByDataFilter\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values:batchUpdate\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values:batchUpdateByDataFilter\",\n \"POST /v4/spreadsheets/{spreadsheetId}:batchUpdate\",\n \"POST /v4/spreadsheets/{spreadsheetId}:getByDataFilter\",\n ],\n },\n {\n name: \"drive.readonly\",\n description: \"See and download all your Google Drive files\",\n rules: [\n \"GET /v4/spreadsheets/{spreadsheetId}\",\n \"GET /v4/spreadsheets/{spreadsheetId}/values/{range}\",\n \"GET /v4/spreadsheets/{spreadsheetId}/values:batchGet\",\n ],\n },\n {\n name: \"spreadsheets\",\n description:\n \"See, edit, create, and delete all your Google Sheets spreadsheets\",\n rules: [\n \"POST /v4/spreadsheets\",\n \"GET /v4/spreadsheets/{spreadsheetId}\",\n \"GET /v4/spreadsheets/{spreadsheetId}/developerMetadata/{metadataId}\",\n \"POST /v4/spreadsheets/{spreadsheetId}/developerMetadata:search\",\n \"POST /v4/spreadsheets/{spreadsheetId}/sheets/{sheetId}:copyTo\",\n \"GET /v4/spreadsheets/{spreadsheetId}/values/{range}\",\n \"PUT /v4/spreadsheets/{spreadsheetId}/values/{range}\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values/{range}:append\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values/{range}:clear\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values:batchClear\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values:batchClearByDataFilter\",\n \"GET /v4/spreadsheets/{spreadsheetId}/values:batchGet\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values:batchGetByDataFilter\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values:batchUpdate\",\n \"POST /v4/spreadsheets/{spreadsheetId}/values:batchUpdateByDataFilter\",\n \"POST /v4/spreadsheets/{spreadsheetId}:batchUpdate\",\n \"POST /v4/spreadsheets/{spreadsheetId}:getByDataFilter\",\n ],\n },\n {\n name: \"spreadsheets.readonly\",\n description: \"See all your Google Sheets spreadsheets\",\n rules: [\n \"GET /v4/spreadsheets/{spreadsheetId}\",\n \"GET /v4/spreadsheets/{spreadsheetId}/values/{range}\",\n \"GET /v4/spreadsheets/{spreadsheetId}/values:batchGet\",\n ],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Granola API docs.\n// Source: https://docs.granola.ai/introduction\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:granola\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const granolaFirewall: FirewallConfig = {\n name: \"granola\",\n description: \"Granola API\",\n placeholders: {\n GRANOLA_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeL\",\n },\n apis: [\n {\n base: \"https://public-api.granola.ai\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.GRANOLA_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from HeyGen API docs.\n// Source: https://docs.heygen.com/reference/authentication\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:heygen\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const heygenFirewall: FirewallConfig = {\n name: \"heygen\",\n description: \"HeyGen API\",\n placeholders: {\n HEYGEN_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalC\",\n },\n apis: [\n {\n base: \"https://api.heygen.com\",\n auth: {\n headers: {\n \"X-Api-Key\": \"${{ secrets.HEYGEN_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from HubSpot API docs.\n// Source: https://developers.hubspot.com/docs/api-reference/auth-oauth-v1/guide\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:hubspot\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const hubspotFirewall: FirewallConfig = {\n name: \"hubspot\",\n description: \"HubSpot API\",\n placeholders: {\n HUBSPOT_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCo\",\n },\n apis: [\n {\n base: \"https://api.hubapi.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.HUBSPOT_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Hugging Face API docs.\n// Source: https://huggingface.co/docs/hub/security-tokens\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:hugging-face\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const huggingFaceFirewall: FirewallConfig = {\n name: \"hugging-face\",\n description: \"Hugging Face API\",\n placeholders: {\n HUGGING_FACE_TOKEN: \"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\",\n },\n apis: [\n {\n base: \"https://huggingface.co/api\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.HUGGING_FACE_TOKEN }}\",\n },\n },\n permissions: [],\n },\n {\n base: \"https://api-inference.huggingface.co\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.HUGGING_FACE_TOKEN }}\",\n },\n },\n permissions: [],\n },\n {\n base: \"https://router.huggingface.co\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.HUGGING_FACE_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Hume AI API docs.\n// Source: https://dev.hume.ai/docs/introduction/api-key\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:hume\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const humeFirewall: FirewallConfig = {\n name: \"hume\",\n description: \"Hume AI API\",\n placeholders: {\n HUME_TOKEN:\n \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeL\",\n },\n apis: [\n {\n base: \"https://api.hume.ai\",\n auth: {\n headers: {\n \"X-Hume-Api-Key\": \"${{ secrets.HUME_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Imgur API docs.\n// Source: https://apidocs.imgur.com/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:imgur\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const imgurFirewall: FirewallConfig = {\n name: \"imgur\",\n description: \"Imgur API\",\n placeholders: {\n IMGUR_CLIENT_ID: \"CoffeeSafeLocal\",\n },\n apis: [\n {\n base: \"https://api.imgur.com\",\n auth: {\n headers: {\n Authorization: \"Client-ID ${{ secrets.IMGUR_CLIENT_ID }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Instagram Graph API docs.\n// Source: https://developers.facebook.com/docs/instagram-platform/reference/access_token/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:instagram\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const instagramFirewall: FirewallConfig = {\n name: \"instagram\",\n description: \"Instagram Graph API\",\n placeholders: {\n INSTAGRAM_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeL\",\n },\n apis: [\n {\n base: \"https://graph.instagram.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.INSTAGRAM_TOKEN }}\",\n },\n },\n permissions: [],\n },\n {\n base: \"https://graph.facebook.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.INSTAGRAM_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Instantly API docs.\n// Source: https://developer.instantly.ai/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:instantly\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const instantlyFirewall: FirewallConfig = {\n name: \"instantly\",\n description: \"Instantly API\",\n placeholders: {\n INSTANTLY_API_KEY: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSaf\",\n },\n apis: [\n {\n base: \"https://api.instantly.ai\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.INSTANTLY_API_KEY }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Intercom API docs.\n// Source: https://developers.intercom.com/docs/build-an-integration/learn-more/authentication\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:intercom\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const intercomFirewall: FirewallConfig = {\n name: \"intercom\",\n description: \"Intercom API\",\n placeholders: {\n INTERCOM_TOKEN:\n \"dG9rOiCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCof\",\n },\n apis: [\n {\n base: \"https://api.intercom.io\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.INTERCOM_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Intervals.icu API docs.\n// Source: https://forum.intervals.icu/t/api-access-to-intervals-icu/609\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:intervals-icu\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const intervalsIcuFirewall: FirewallConfig = {\n name: \"intervals-icu\",\n description: \"Intervals.icu Training API\",\n placeholders: {\n INTERVALS_ICU_TOKEN:\n \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSaf\",\n },\n apis: [\n {\n base: \"https://intervals.icu\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.INTERVALS_ICU_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Jotform API docs.\n// Source: https://api.jotform.com/docs/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:jotform\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const jotformFirewall: FirewallConfig = {\n name: \"jotform\",\n description: \"Jotform API\",\n placeholders: {\n JOTFORM_TOKEN:\n \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffe\",\n },\n apis: [\n {\n base: \"https://api.jotform.com\",\n auth: {\n headers: {\n APIKEY: \"${{ secrets.JOTFORM_TOKEN }}\",\n },\n },\n permissions: [],\n },\n {\n base: \"https://eu-api.jotform.com\",\n auth: {\n headers: {\n APIKEY: \"${{ secrets.JOTFORM_TOKEN }}\",\n },\n },\n permissions: [],\n },\n {\n base: \"https://hipaa-api.jotform.com\",\n auth: {\n headers: {\n APIKEY: \"${{ secrets.JOTFORM_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Kommo API docs.\n// Source: https://www.kommo.com/developers/content/api/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:kommo\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const kommoFirewall: FirewallConfig = {\n name: \"kommo\",\n description: \"Kommo CRM API\",\n placeholders: {\n KOMMO_API_KEY: \"kmApiKey_CoffeeSafeLocalCoffeeSafeLocalCoffee\",\n },\n apis: [\n {\n base: \"https://${{ vars.KOMMO_SUBDOMAIN }}.kommo.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.KOMMO_API_KEY }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Lark Open Platform API docs.\n// Source: https://open.larksuite.com/document/home/introduction-to-scope-and-authorization/access-credentials\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:lark\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const larkFirewall: FirewallConfig = {\n name: \"lark\",\n description: \"Lark Open Platform API\",\n placeholders: {\n LARK_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSaf\",\n },\n apis: [\n {\n base: \"https://open.larksuite.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.LARK_TOKEN }}\",\n },\n },\n permissions: [],\n },\n {\n base: \"https://open.feishu.cn\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.LARK_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from LINE Messaging API docs.\n// Source: https://developers.line.biz/en/reference/messaging-api/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:line\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const lineFirewall: FirewallConfig = {\n name: \"line\",\n description: \"LINE Messaging API\",\n placeholders: {\n LINE_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSaf\",\n },\n apis: [\n {\n base: \"https://api.line.me\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.LINE_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Linear API docs.\n// Source: https://developers.linear.app/docs/graphql/working-with-the-graphql-api\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:linear\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const linearFirewall: FirewallConfig = {\n name: \"linear\",\n description: \"Linear API\",\n placeholders: {\n LINEAR_TOKEN: \"lin_api_CoffeeSafeLocalCoffeeSafeLocalCoffeeSafe\",\n },\n apis: [\n {\n base: \"https://api.linear.app\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.LINEAR_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Loops API docs.\n// Source: https://loops.so/docs/api-reference/intro\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:loops\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const loopsFirewall: FirewallConfig = {\n name: \"loops\",\n description: \"Loops API\",\n placeholders: {\n LOOPS_TOKEN: \"c0ffee5afe10ca1c0ffee5afe10ca1c0\",\n },\n apis: [\n {\n base: \"https://app.loops.so/api\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.LOOPS_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Mailchimp Marketing API docs.\n// Source: https://mailchimp.com/developer/marketing/api/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:mailchimp\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const mailchimpFirewall: FirewallConfig = {\n name: \"mailchimp\",\n description: \"Mailchimp Marketing API\",\n placeholders: {\n MAILCHIMP_TOKEN: \"c0ffee5afe10ca1c0ffee5afe10ca1c0-us6\",\n },\n apis: [\n {\n base: \"https://{dc}.api.mailchimp.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.MAILCHIMP_TOKEN }}\",\n },\n },\n permissions: [],\n },\n {\n base: \"https://login.mailchimp.com\",\n auth: {\n headers: {\n Authorization: \"OAuth ${{ secrets.MAILCHIMP_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Make API docs.\n// Source: https://developers.make.com/api-documentation\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:make\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const makeFirewall: FirewallConfig = {\n name: \"make\",\n description: \"Make (formerly Integromat) Automation API\",\n placeholders: {\n MAKE_TOKEN: \"mkTkn-CoffeeSafeLoca-lCof-feeS-afeLocalCoff\",\n },\n apis: [\n {\n base: \"https://eu1.make.com\",\n auth: {\n headers: {\n Authorization: \"Token ${{ secrets.MAKE_TOKEN }}\",\n },\n },\n permissions: [],\n },\n {\n base: \"https://eu2.make.com\",\n auth: {\n headers: {\n Authorization: \"Token ${{ secrets.MAKE_TOKEN }}\",\n },\n },\n permissions: [],\n },\n {\n base: \"https://us1.make.com\",\n auth: {\n headers: {\n Authorization: \"Token ${{ secrets.MAKE_TOKEN }}\",\n },\n },\n permissions: [],\n },\n {\n base: \"https://us2.make.com\",\n auth: {\n headers: {\n Authorization: \"Token ${{ secrets.MAKE_TOKEN }}\",\n },\n },\n permissions: [],\n },\n {\n base: \"https://eu1.make.celonis.com\",\n auth: {\n headers: {\n Authorization: \"Token ${{ secrets.MAKE_TOKEN }}\",\n },\n },\n permissions: [],\n },\n {\n base: \"https://us1.make.celonis.com\",\n auth: {\n headers: {\n Authorization: \"Token ${{ secrets.MAKE_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Mailsac API docs.\n// Source: https://docs.mailsac.com/en/master/api_examples/getting_started/getting_started.html\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:mailsac\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const mailsacFirewall: FirewallConfig = {\n name: \"mailsac\",\n description: \"Mailsac Email API\",\n placeholders: {\n MAILSAC_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafe\",\n },\n apis: [\n {\n base: \"https://mailsac.com\",\n auth: {\n headers: {\n \"Mailsac-Key\": \"${{ secrets.MAILSAC_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Mercury API docs.\n// Source: https://docs.mercury.com/docs/getting-started\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:mercury\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const mercuryFirewall: FirewallConfig = {\n name: \"mercury\",\n description: \"Mercury API\",\n placeholders: {\n MERCURY_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafe\",\n },\n apis: [\n {\n base: \"https://api.mercury.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.MERCURY_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Metabase API docs.\n// Source: https://www.metabase.com/docs/latest/api-documentation\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:metabase\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const metabaseFirewall: FirewallConfig = {\n name: \"metabase\",\n description: \"Metabase API\",\n placeholders: {\n METABASE_TOKEN: \"mb_CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLoca\",\n },\n apis: [\n {\n base: \"${{ vars.METABASE_BASE_URL }}\",\n auth: {\n headers: {\n \"x-api-key\": \"${{ secrets.METABASE_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Meta Ads (Facebook Graph) API docs.\n// Source: https://developers.facebook.com/docs/marketing-apis/overview/authentication\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:meta-ads\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const metaAdsFirewall: FirewallConfig = {\n name: \"meta-ads\",\n description: \"Meta Ads (Facebook Graph) API\",\n placeholders: {\n META_ADS_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafe\",\n },\n apis: [\n {\n base: \"https://graph.facebook.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.META_ADS_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from MiniMax API docs.\n// Source: https://platform.minimax.io/docs/guides/quickstart-preparation\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:minimax\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const minimaxFirewall: FirewallConfig = {\n name: \"minimax\",\n description: \"MiniMax API\",\n placeholders: {\n MINIMAX_TOKEN:\n \"eyJhbGciOiJSUzI1NiJ9.CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocal\",\n },\n apis: [\n {\n base: \"https://api.minimax.io\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.MINIMAX_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Monday.com API docs.\n// Source: https://developer.monday.com/api-reference/docs/authentication\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:monday\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const mondayFirewall: FirewallConfig = {\n name: \"monday\",\n description: \"Monday.com API\",\n placeholders: {\n MONDAY_TOKEN:\n \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkNvZmZlZVNhZmVMb2NhbCIsImlhdCI6MTUxNjIzOTAyMn0.CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLoc\",\n },\n apis: [\n {\n base: \"https://api.monday.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.MONDAY_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Neon API docs.\n// Source: https://api-docs.neon.tech/reference/authentication\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:neon\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const neonFirewall: FirewallConfig = {\n name: \"neon\",\n description: \"Neon API\",\n placeholders: {\n NEON_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCo\",\n },\n apis: [\n {\n base: \"https://console.neon.tech/api\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.NEON_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Notion's official OpenAPI spec.\n// Source: https://developers.notion.com/openapi.json\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:notion\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const notionFirewall: FirewallConfig = {\n name: \"notion\",\n description: \"Notion API\",\n placeholders: {\n NOTION_TOKEN: \"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\",\n },\n apis: [\n {\n base: \"https://api.notion.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.NOTION_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"insert_comments\",\n description: \"Create comments\",\n rules: [\"POST /v1/comments\"],\n },\n {\n name: \"insert_content\",\n description:\n \"Create pages, databases, blocks, data sources, and upload files\",\n rules: [\n \"PATCH /v1/blocks/{block_id}/children\",\n \"POST /v1/data_sources\",\n \"POST /v1/databases\",\n \"POST /v1/file_uploads\",\n \"POST /v1/file_uploads/{file_upload_id}/complete\",\n \"POST /v1/file_uploads/{file_upload_id}/send\",\n \"POST /v1/pages\",\n \"POST /v1/views\",\n \"POST /v1/views/{view_id}/queries\",\n ],\n },\n {\n name: \"read_comments\",\n description: \"Read comments\",\n rules: [\"GET /v1/comments\", \"GET /v1/comments/{comment_id}\"],\n },\n {\n name: \"read_content\",\n description: \"Read pages, databases, blocks, data sources, and files\",\n rules: [\n \"GET /v1/blocks/{block_id}\",\n \"GET /v1/blocks/{block_id}/children\",\n \"GET /v1/custom_emojis\",\n \"GET /v1/data_sources/{data_source_id}\",\n \"POST /v1/data_sources/{data_source_id}/query\",\n \"GET /v1/data_sources/{data_source_id}/templates\",\n \"GET /v1/databases/{database_id}\",\n \"GET /v1/file_uploads\",\n \"GET /v1/file_uploads/{file_upload_id}\",\n \"GET /v1/pages/{page_id}\",\n \"GET /v1/pages/{page_id}/markdown\",\n \"GET /v1/pages/{page_id}/properties/{property_id}\",\n \"POST /v1/search\",\n \"GET /v1/views\",\n \"GET /v1/views/{view_id}\",\n \"GET /v1/views/{view_id}/queries/{query_id}\",\n ],\n },\n {\n name: \"read_users\",\n description: \"Read user information\",\n rules: [\n \"GET /v1/users\",\n \"GET /v1/users/me\",\n \"GET /v1/users/{user_id}\",\n ],\n },\n {\n name: \"update_content\",\n description:\n \"Update and delete pages, databases, blocks, and data sources\",\n rules: [\n \"PATCH /v1/blocks/{block_id}\",\n \"DELETE /v1/blocks/{block_id}\",\n \"PATCH /v1/data_sources/{data_source_id}\",\n \"PATCH /v1/databases/{database_id}\",\n \"PATCH /v1/pages/{page_id}\",\n \"PATCH /v1/pages/{page_id}/markdown\",\n \"POST /v1/pages/{page_id}/move\",\n \"PATCH /v1/views/{view_id}\",\n \"DELETE /v1/views/{view_id}\",\n \"DELETE /v1/views/{view_id}/queries/{query_id}\",\n ],\n },\n ],\n },\n ],\n};\n","// Auto-generated from OpenAI API docs.\n// Source: https://platform.openai.com/docs/api-reference/introduction\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:openai\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const openaiFirewall: FirewallConfig = {\n name: \"openai\",\n description: \"OpenAI API\",\n placeholders: {\n OPENAI_TOKEN:\n \"sk-proj-CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocaT3BlbkFJCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLoca\",\n },\n apis: [\n {\n base: \"https://api.openai.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.OPENAI_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Microsoft Graph API docs.\n// Source: https://learn.microsoft.com/en-us/graph/auth/auth-concepts\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:outlook-calendar\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const outlookCalendarFirewall: FirewallConfig = {\n name: \"outlook-calendar\",\n description: \"Microsoft Graph API (Outlook Calendar)\",\n placeholders: {\n OUTLOOK_CALENDAR_TOKEN:\n \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafe\",\n },\n apis: [\n {\n base: \"https://graph.microsoft.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.OUTLOOK_CALENDAR_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Microsoft Graph API docs.\n// Source: https://learn.microsoft.com/en-us/graph/auth/auth-concepts\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:outlook-mail\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const outlookMailFirewall: FirewallConfig = {\n name: \"outlook-mail\",\n description: \"Microsoft Graph API (Outlook Mail)\",\n placeholders: {\n OUTLOOK_MAIL_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSa\",\n },\n apis: [\n {\n base: \"https://graph.microsoft.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.OUTLOOK_MAIL_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from PDF4me API docs.\n// Source: https://dev.pdf4me.com/apiv2/documentation/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:pdf4me\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const pdf4meFirewall: FirewallConfig = {\n name: \"pdf4me\",\n description: \"PDF4me Document API\",\n placeholders: {\n PDF4ME_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSa\",\n },\n apis: [\n {\n base: \"https://api.pdf4me.com\",\n auth: {\n headers: {\n Authorization: \"${{ secrets.PDF4ME_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from PDF.co API docs.\n// Source: https://docs.pdf.co/api-reference/introduction\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:pdfco\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const pdfcoFirewall: FirewallConfig = {\n name: \"pdfco\",\n description: \"PDF.co API\",\n placeholders: {\n PDFCO_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSa\",\n },\n apis: [\n {\n base: \"https://api.pdf.co\",\n auth: {\n headers: {\n \"x-api-key\": \"${{ secrets.PDFCO_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from PDForge API docs.\n// Source: https://docs.pdforge.com/getting-started/authentication\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:pdforge\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const pdforgeFirewall: FirewallConfig = {\n name: \"pdforge\",\n description: \"PDForge PDF Generation API\",\n placeholders: {\n PDFORGE_API_KEY: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSaf\",\n },\n apis: [\n {\n base: \"https://api.pdforge.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.PDFORGE_API_KEY }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Perplexity API docs.\n// Source: https://docs.perplexity.ai/docs/admin/api-key-management\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:perplexity\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const perplexityFirewall: FirewallConfig = {\n name: \"perplexity\",\n description: \"Perplexity API\",\n placeholders: {\n PERPLEXITY_TOKEN: \"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\",\n },\n apis: [\n {\n base: \"https://api.perplexity.ai\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.PERPLEXITY_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Plausible Analytics API docs.\n// Source: https://plausible.io/docs/stats-api\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:plausible\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const plausibleFirewall: FirewallConfig = {\n name: \"plausible\",\n description: \"Plausible Analytics API\",\n placeholders: {\n PLAUSIBLE_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalC\",\n },\n apis: [\n {\n base: \"https://plausible.io/api\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.PLAUSIBLE_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Podchaser API docs.\n// Source: https://api-docs.podchaser.com/docs/authorization/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:podchaser\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const podchaserFirewall: FirewallConfig = {\n name: \"podchaser\",\n description: \"Podchaser Podcast API\",\n placeholders: {\n PODCHASER_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafe\",\n },\n apis: [\n {\n base: \"https://api.podchaser.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.PODCHASER_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from PostHog API docs.\n// Source: https://posthog.com/docs/api\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:posthog\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const posthogFirewall: FirewallConfig = {\n name: \"posthog\",\n description: \"PostHog API\",\n placeholders: {\n POSTHOG_TOKEN: \"phx_CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCo\",\n },\n apis: [\n {\n base: \"https://us.posthog.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.POSTHOG_TOKEN }}\",\n },\n },\n permissions: [],\n },\n {\n base: \"https://eu.posthog.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.POSTHOG_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Productlane API docs.\n// Source: https://productlane.com/docs/api-reference/authentication\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:productlane\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const productlaneFirewall: FirewallConfig = {\n name: \"productlane\",\n description: \"Productlane API\",\n placeholders: {\n PRODUCTLANE_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSa\",\n },\n apis: [\n {\n base: \"https://productlane.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.PRODUCTLANE_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Prisma Postgres API docs.\n// Source: https://www.prisma.io/docs/postgres/introduction/management-api\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:prisma-postgres\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const prismaPostgresFirewall: FirewallConfig = {\n name: \"prisma-postgres\",\n description: \"Prisma Postgres Management API\",\n placeholders: {\n PRISMA_POSTGRES_TOKEN:\n \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSa\",\n },\n apis: [\n {\n base: \"https://api.prisma.io\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.PRISMA_POSTGRES_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Pushinator API docs.\n// Source: https://pushinator.com/api\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:pushinator\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const pushinatorFirewall: FirewallConfig = {\n name: \"pushinator\",\n description: \"Pushinator API\",\n placeholders: {\n PUSHINATOR_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSaf\",\n },\n apis: [\n {\n base: \"https://api.pushinator.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.PUSHINATOR_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Qdrant API docs.\n// Source: https://qdrant.tech/documentation/interfaces/#api-reference\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:qdrant\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const qdrantFirewall: FirewallConfig = {\n name: \"qdrant\",\n description: \"Qdrant Vector Database API\",\n placeholders: {\n QDRANT_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLo\",\n },\n apis: [\n {\n base: \"${{ vars.QDRANT_BASE_URL }}\",\n auth: {\n headers: {\n \"api-key\": \"${{ secrets.QDRANT_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Qiita API v2 docs.\n// Source: https://qiita.com/api/v2/docs\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:qiita\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const qiitaFirewall: FirewallConfig = {\n name: \"qiita\",\n description: \"Qiita API\",\n placeholders: {\n QIITA_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSa\",\n },\n apis: [\n {\n base: \"https://qiita.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.QIITA_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Reddit API docs.\n// Source: https://github.com/reddit-archive/reddit/wiki/OAuth2\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:reddit\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const redditFirewall: FirewallConfig = {\n name: \"reddit\",\n description: \"Reddit API\",\n placeholders: {\n REDDIT_TOKEN:\n \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffe\",\n },\n apis: [\n {\n base: \"https://oauth.reddit.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.REDDIT_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Reportei API docs.\n// Source: https://developers.reportei.com/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:reportei\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const reporteiFirewall: FirewallConfig = {\n name: \"reportei\",\n description: \"Reportei API\",\n placeholders: {\n REPORTEI_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSaf\",\n },\n apis: [\n {\n base: \"https://app.reportei.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.REPORTEI_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Resend API docs.\n// Source: https://resend.com/docs/api-reference/api-keys/create-api-key\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:resend\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const resendFirewall: FirewallConfig = {\n name: \"resend\",\n description: \"Resend API\",\n placeholders: {\n RESEND_TOKEN: \"re_CoffeeSafeLocalCoffeeSafeLocalCof\",\n },\n apis: [\n {\n base: \"https://api.resend.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.RESEND_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from RevenueCat API docs.\n// Source: https://www.revenuecat.com/docs/projects/authentication\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:revenuecat\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const revenuecatFirewall: FirewallConfig = {\n name: \"revenuecat\",\n description: \"RevenueCat API\",\n placeholders: {\n REVENUECAT_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSaf\",\n },\n apis: [\n {\n base: \"https://api.revenuecat.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.REVENUECAT_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Runway API docs.\n// Source: https://docs.dev.runwayml.com/guides/setup/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:runway\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const runwayFirewall: FirewallConfig = {\n name: \"runway\",\n description: \"Runway API\",\n placeholders: {\n RUNWAY_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalC\",\n },\n apis: [\n {\n base: \"https://api.dev.runwayml.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.RUNWAY_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Salesforce REST API docs.\n// Source: https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:salesforce\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const salesforceFirewall: FirewallConfig = {\n name: \"salesforce\",\n description: \"Salesforce REST API\",\n placeholders: {\n SALESFORCE_TOKEN:\n \"00D0c0ffee5afe1!AQEAQFCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffee\",\n },\n apis: [\n {\n base: \"https://${{ vars.SALESFORCE_INSTANCE }}.my.salesforce.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.SALESFORCE_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from ScrapeNinja API docs.\n// Source: https://scrapeninja.net/docs/getting-started/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:scrapeninja\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const scrapeninjaFirewall: FirewallConfig = {\n name: \"scrapeninja\",\n description: \"ScrapeNinja Web Scraping API\",\n placeholders: {\n SCRAPENINJA_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSa\",\n },\n apis: [\n {\n base: \"https://scrapeninja.p.rapidapi.com\",\n auth: {\n headers: {\n \"X-RapidAPI-Key\": \"${{ secrets.SCRAPENINJA_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Sentry's official OpenAPI spec.\n// Source: https://raw.githubusercontent.com/getsentry/sentry-api-schema/refs/heads/main/openapi-derefed.json\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:sentry\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const sentryFirewall: FirewallConfig = {\n name: \"sentry\",\n description: \"Sentry API\",\n placeholders: {\n SENTRY_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCo\",\n },\n apis: [\n {\n base: \"https://sentry.io/api\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.SENTRY_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"alerts:read\",\n rules: [\n \"GET /api/0/organizations/{organization_id_or_slug}/alert-rules/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/alert-rules/{alert_rule_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/detectors/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/detectors/{detector_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/monitors/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/monitors/{monitor_id_or_slug}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/monitors/{monitor_id_or_slug}/checkins/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/workflows/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/workflows/{workflow_id}/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/monitors/{monitor_id_or_slug}/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/monitors/{monitor_id_or_slug}/checkins/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/{rule_id}/\",\n ],\n },\n {\n name: \"alerts:write\",\n rules: [\n \"POST /api/0/organizations/{organization_id_or_slug}/alert-rules/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/alert-rules/{alert_rule_id}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/alert-rules/{alert_rule_id}/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/detectors/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/detectors/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/detectors/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/detectors/{detector_id}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/detectors/{detector_id}/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/monitors/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/monitors/{monitor_id_or_slug}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/monitors/{monitor_id_or_slug}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/monitors/{monitor_id_or_slug}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/monitors/{monitor_id_or_slug}/checkins/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/workflows/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/workflows/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/workflows/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/workflows/{workflow_id}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/workflows/{workflow_id}/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/monitors/{monitor_id_or_slug}/\",\n \"PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/monitors/{monitor_id_or_slug}/\",\n \"DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/monitors/{monitor_id_or_slug}/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/monitors/{monitor_id_or_slug}/checkins/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/\",\n \"POST /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/{rule_id}/\",\n \"PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/{rule_id}/\",\n \"DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/{rule_id}/\",\n ],\n },\n {\n name: \"event:admin\",\n rules: [\n \"GET /api/0/organizations/{organization_id_or_slug}/issues/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/issues/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/issues/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/autofix/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/autofix/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/events/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/events/{event_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/external-issues/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/tags/{key}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/tags/{key}/values/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/shortids/{issue_id}/\",\n \"DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/issues/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/{replay_id}/viewed-by/\",\n \"DELETE /api/0/sentry-app-installations/{uuid}/external-issues/{external_issue_id}/\",\n \"GET /api/0/sentry-apps/{sentry_app_id_or_slug}/\",\n ],\n },\n {\n name: \"event:read\",\n rules: [\n \"GET /api/0/organizations/{organization_id_or_slug}/issues/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/autofix/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/events/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/events/{event_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/external-issues/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/hashes/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/tags/{key}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/tags/{key}/values/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/shortids/{issue_id}/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/issues/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/{replay_id}/viewed-by/\",\n \"GET /api/0/sentry-apps/{sentry_app_id_or_slug}/\",\n ],\n },\n {\n name: \"event:write\",\n rules: [\n \"GET /api/0/organizations/{organization_id_or_slug}/issues/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/issues/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/autofix/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/autofix/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/events/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/events/{event_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/external-issues/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/tags/{key}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/tags/{key}/values/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/shortids/{issue_id}/\",\n \"PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/issues/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/{replay_id}/viewed-by/\",\n \"POST /api/0/sentry-app-installations/{uuid}/external-issues/\",\n \"GET /api/0/sentry-apps/{sentry_app_id_or_slug}/\",\n ],\n },\n {\n name: \"member:admin\",\n rules: [\n \"GET /api/0/organizations/{organization_id_or_slug}/members/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/members/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/members/{member_id}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/members/{member_id}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/members/{member_id}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/members/{member_id}/teams/{team_id_or_slug}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/scim/v2/Users\",\n \"POST /api/0/organizations/{organization_id_or_slug}/scim/v2/Users\",\n \"GET /api/0/organizations/{organization_id_or_slug}/scim/v2/Users/{member_id}\",\n \"PATCH /api/0/organizations/{organization_id_or_slug}/scim/v2/Users/{member_id}\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/scim/v2/Users/{member_id}\",\n ],\n },\n {\n name: \"member:invite\",\n rules: [\n \"POST /api/0/organizations/{organization_id_or_slug}/members/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/members/{member_id}/\",\n ],\n },\n {\n name: \"member:read\",\n rules: [\n \"GET /api/0/organizations/{organization_id_or_slug}/members/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/members/{member_id}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/members/{member_id}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/members/{member_id}/teams/{team_id_or_slug}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/scim/v2/Users\",\n \"GET /api/0/organizations/{organization_id_or_slug}/scim/v2/Users/{member_id}\",\n \"GET /api/0/sentry-apps/{sentry_app_id_or_slug}/\",\n ],\n },\n {\n name: \"member:write\",\n rules: [\n \"GET /api/0/organizations/{organization_id_or_slug}/members/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/members/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/members/{member_id}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/members/{member_id}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/members/{member_id}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/members/{member_id}/teams/{team_id_or_slug}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/scim/v2/Users\",\n \"POST /api/0/organizations/{organization_id_or_slug}/scim/v2/Users\",\n \"GET /api/0/organizations/{organization_id_or_slug}/scim/v2/Users/{member_id}\",\n \"PATCH /api/0/organizations/{organization_id_or_slug}/scim/v2/Users/{member_id}\",\n ],\n },\n {\n name: \"org:admin\",\n rules: [\n \"GET /api/0/organizations/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/alert-rules/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/alert-rules/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/alert-rules/{alert_rule_id}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/alert-rules/{alert_rule_id}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/alert-rules/{alert_rule_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/config/integrations/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/dashboards/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/dashboards/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/dashboards/{dashboard_id}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/dashboards/{dashboard_id}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/dashboards/{dashboard_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/detectors/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/detectors/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/detectors/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/detectors/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/detectors/{detector_id}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/detectors/{detector_id}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/detectors/{detector_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/discover/saved/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/discover/saved/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/discover/saved/{query_id}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/discover/saved/{query_id}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/discover/saved/{query_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/environments/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/eventids/{event_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/events-timeseries/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/events/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/external-users/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/external-users/{external_user_id}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/external-users/{external_user_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/integrations/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/integrations/{integration_id}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/integrations/{integration_id}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/members/{member_id}/teams/{team_id_or_slug}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/members/{member_id}/teams/{team_id_or_slug}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/monitors/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/monitors/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/notifications/actions/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/notifications/actions/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/notifications/actions/{action_id}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/notifications/actions/{action_id}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/notifications/actions/{action_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/preprodartifacts/{artifact_id}/install-details/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/preprodartifacts/{artifact_id}/size-analysis/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repositories/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repositories/sync/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repositories/sync/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repositories/tokens/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/branches/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/test-results-aggregates/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/test-results/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/test-suites/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/token/regenerate/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/project-keys/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/projects/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/relay_usage/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/replay-count/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/replay-selectors/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/replays/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/replays/{replay_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/repos/{repo_id}/commits/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/sentry-apps/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/sessions/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/stats-summary/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/stats_v2/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/teams/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/teams/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/user-teams/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/workflows/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/workflows/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/workflows/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/workflows/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/workflows/{workflow_id}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/workflows/{workflow_id}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/workflows/{workflow_id}/\",\n \"PUT /api/0/sentry-apps/{sentry_app_id_or_slug}/\",\n \"DELETE /api/0/sentry-apps/{sentry_app_id_or_slug}/\",\n ],\n },\n {\n name: \"org:ci\",\n rules: [\n \"GET /api/0/organizations/{organization_id_or_slug}/release-threshold-statuses/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/releases/{version}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/releases/{version}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/releases/{version}/deploys/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/releases/{version}/deploys/\",\n ],\n },\n {\n name: \"org:integrations\",\n rules: [\n \"GET /api/0/organizations/{organization_id_or_slug}/integrations/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/integrations/{integration_id}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/integrations/{integration_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/sentry-app-installations/\",\n ],\n },\n {\n name: \"org:read\",\n rules: [\n \"GET /api/0/organizations/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/alert-rules/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/alert-rules/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/alert-rules/{alert_rule_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/config/integrations/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/dashboards/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/dashboards/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/dashboards/{dashboard_id}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/dashboards/{dashboard_id}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/dashboards/{dashboard_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/detectors/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/detectors/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/detectors/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/detectors/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/detectors/{detector_id}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/detectors/{detector_id}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/detectors/{detector_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/discover/saved/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/discover/saved/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/discover/saved/{query_id}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/discover/saved/{query_id}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/discover/saved/{query_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/environments/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/eventids/{event_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/events-timeseries/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/events/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/integrations/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/integrations/{integration_id}/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/members/{member_id}/teams/{team_id_or_slug}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/members/{member_id}/teams/{team_id_or_slug}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/members/{member_id}/teams/{team_id_or_slug}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/monitors/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/monitors/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/notifications/actions/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/notifications/actions/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/notifications/actions/{action_id}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/notifications/actions/{action_id}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/notifications/actions/{action_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/preprodartifacts/{artifact_id}/install-details/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/preprodartifacts/{artifact_id}/size-analysis/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repositories/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repositories/sync/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repositories/sync/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repositories/tokens/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/branches/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/test-results-aggregates/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/test-results/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/test-suites/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/token/regenerate/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/project-keys/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/projects/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/relay_usage/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/replay-count/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/replay-selectors/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/replays/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/replays/{replay_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/repos/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/repos/{repo_id}/commits/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/sentry-app-installations/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/sentry-apps/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/sessions/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/stats-summary/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/stats_v2/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/teams/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/user-teams/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/workflows/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/workflows/{workflow_id}/\",\n \"GET /api/0/sentry-apps/{sentry_app_id_or_slug}/\",\n ],\n },\n {\n name: \"org:write\",\n rules: [\n \"GET /api/0/organizations/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/alert-rules/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/alert-rules/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/alert-rules/{alert_rule_id}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/alert-rules/{alert_rule_id}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/alert-rules/{alert_rule_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/config/integrations/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/dashboards/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/dashboards/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/dashboards/{dashboard_id}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/dashboards/{dashboard_id}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/dashboards/{dashboard_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/detectors/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/detectors/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/detectors/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/detectors/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/detectors/{detector_id}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/detectors/{detector_id}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/detectors/{detector_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/discover/saved/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/discover/saved/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/discover/saved/{query_id}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/discover/saved/{query_id}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/discover/saved/{query_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/environments/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/eventids/{event_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/events-timeseries/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/events/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/external-users/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/external-users/{external_user_id}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/external-users/{external_user_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/forwarding/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/forwarding/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/forwarding/{data_forwarder_id}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/forwarding/{data_forwarder_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/integrations/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/integrations/{integration_id}/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/members/{member_id}/teams/{team_id_or_slug}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/members/{member_id}/teams/{team_id_or_slug}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/members/{member_id}/teams/{team_id_or_slug}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/monitors/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/monitors/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/notifications/actions/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/notifications/actions/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/notifications/actions/{action_id}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/notifications/actions/{action_id}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/notifications/actions/{action_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/preprodartifacts/{artifact_id}/install-details/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/preprodartifacts/{artifact_id}/size-analysis/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repositories/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repositories/sync/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repositories/sync/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repositories/tokens/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/branches/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/test-results-aggregates/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/test-results/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/test-suites/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/token/regenerate/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/project-keys/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/projects/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/relay_usage/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/replay-count/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/replay-selectors/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/replays/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/replays/{replay_id}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/repos/{repo_id}/commits/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/sentry-apps/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/sessions/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/stats-summary/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/stats_v2/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/teams/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/teams/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/user-teams/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/workflows/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/workflows/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/workflows/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/workflows/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/workflows/{workflow_id}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/workflows/{workflow_id}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/workflows/{workflow_id}/\",\n \"PUT /api/0/sentry-apps/{sentry_app_id_or_slug}/\",\n ],\n },\n {\n name: \"project:admin\",\n rules: [\n \"GET /api/0/organizations/{organization_id_or_slug}/monitors/{monitor_id_or_slug}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/monitors/{monitor_id_or_slug}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/monitors/{monitor_id_or_slug}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/monitors/{monitor_id_or_slug}/checkins/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/release-threshold-statuses/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/releases/{version}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/releases/{version}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/releases/{version}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/releases/{version}/deploys/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/releases/{version}/deploys/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/spike-protections/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/spike-protections/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/\",\n \"PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/\",\n \"DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/environments/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/environments/{environment}/\",\n \"PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/environments/{environment}/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/events/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/events/{event_id}/source-map-debug/\",\n \"DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/files/dsyms/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/filters/\",\n \"PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/filters/{filter_id}/\",\n \"DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/hooks/{hook_id}/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/keys/\",\n \"POST /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/keys/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/keys/{key_id}/\",\n \"PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/keys/{key_id}/\",\n \"DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/keys/{key_id}/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/members/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/monitors/{monitor_id_or_slug}/\",\n \"PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/monitors/{monitor_id_or_slug}/\",\n \"DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/monitors/{monitor_id_or_slug}/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/monitors/{monitor_id_or_slug}/checkins/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/ownership/\",\n \"PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/ownership/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/preprodartifacts/build-distribution/latest/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/jobs/delete/\",\n \"POST /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/jobs/delete/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/jobs/delete/{job_id}/\",\n \"DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/{replay_id}/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/{replay_id}/clicks/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/{replay_id}/recording-segments/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/{replay_id}/recording-segments/{segment_id}/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/\",\n \"POST /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/{rule_id}/\",\n \"PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/{rule_id}/\",\n \"DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/{rule_id}/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/symbol-sources/\",\n \"POST /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/symbol-sources/\",\n \"PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/symbol-sources/\",\n \"DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/symbol-sources/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/teams/\",\n \"POST /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/teams/{team_id_or_slug}/\",\n \"DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/teams/{team_id_or_slug}/\",\n \"GET /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/projects/\",\n \"POST /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/projects/\",\n ],\n },\n {\n name: \"project:distribution\",\n rules: [\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/preprodartifacts/build-distribution/latest/\",\n ],\n },\n {\n name: \"project:read\",\n rules: [\n \"GET /api/0/organizations/{organization_id_or_slug}/monitors/{monitor_id_or_slug}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/monitors/{monitor_id_or_slug}/checkins/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/release-threshold-statuses/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/releases/{version}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/releases/{version}/deploys/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/spike-protections/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/spike-protections/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/\",\n \"PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/environments/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/environments/{environment}/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/events/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/events/{event_id}/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/events/{event_id}/source-map-debug/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/files/dsyms/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/filters/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/hooks/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/hooks/{hook_id}/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/keys/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/keys/{key_id}/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/members/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/monitors/{monitor_id_or_slug}/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/monitors/{monitor_id_or_slug}/checkins/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/ownership/\",\n \"PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/ownership/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/preprodartifacts/build-distribution/latest/\",\n \"DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/{replay_id}/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/{replay_id}/clicks/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/{replay_id}/recording-segments/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/{replay_id}/recording-segments/{segment_id}/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/{rule_id}/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/stats/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/symbol-sources/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/tags/{key}/values/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/teams/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/user-feedback/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/users/\",\n \"GET /api/0/sentry-apps/{sentry_app_id_or_slug}/\",\n \"GET /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/projects/\",\n ],\n },\n {\n name: \"project:releases\",\n rules: [\n \"GET /api/0/organizations/{organization_id_or_slug}/release-threshold-statuses/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/releases/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/releases/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/releases/{version}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/releases/{version}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/releases/{version}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/releases/{version}/commitfiles/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/releases/{version}/commits/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/releases/{version}/deploys/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/releases/{version}/deploys/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/releases/{version}/files/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/releases/{version}/files/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/releases/{version}/files/{file_id}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/releases/{version}/files/{file_id}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/releases/{version}/files/{file_id}/\",\n \"DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/files/dsyms/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/releases/{version}/commits/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/releases/{version}/files/\",\n \"POST /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/releases/{version}/files/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/releases/{version}/files/{file_id}/\",\n \"PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/releases/{version}/files/{file_id}/\",\n \"DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/releases/{version}/files/{file_id}/\",\n \"GET /api/0/sentry-apps/{sentry_app_id_or_slug}/\",\n ],\n },\n {\n name: \"project:write\",\n rules: [\n \"GET /api/0/organizations/{organization_id_or_slug}/monitors/{monitor_id_or_slug}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/monitors/{monitor_id_or_slug}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/monitors/{monitor_id_or_slug}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/monitors/{monitor_id_or_slug}/checkins/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/release-threshold-statuses/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/releases/{version}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/releases/{version}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/releases/{version}/deploys/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/releases/{version}/deploys/\",\n \"POST /api/0/organizations/{organization_id_or_slug}/spike-protections/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/spike-protections/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/\",\n \"PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/environments/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/environments/{environment}/\",\n \"PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/environments/{environment}/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/events/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/events/{event_id}/source-map-debug/\",\n \"POST /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/files/dsyms/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/filters/\",\n \"PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/filters/{filter_id}/\",\n \"POST /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/hooks/\",\n \"PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/hooks/{hook_id}/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/keys/\",\n \"POST /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/keys/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/keys/{key_id}/\",\n \"PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/keys/{key_id}/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/members/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/monitors/{monitor_id_or_slug}/\",\n \"PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/monitors/{monitor_id_or_slug}/\",\n \"DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/monitors/{monitor_id_or_slug}/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/monitors/{monitor_id_or_slug}/checkins/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/ownership/\",\n \"PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/ownership/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/preprodartifacts/build-distribution/latest/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/jobs/delete/\",\n \"POST /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/jobs/delete/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/jobs/delete/{job_id}/\",\n \"DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/{replay_id}/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/{replay_id}/clicks/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/{replay_id}/recording-segments/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/{replay_id}/recording-segments/{segment_id}/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/\",\n \"POST /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/{rule_id}/\",\n \"PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/{rule_id}/\",\n \"DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/{rule_id}/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/symbol-sources/\",\n \"POST /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/symbol-sources/\",\n \"PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/symbol-sources/\",\n \"GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/teams/\",\n \"POST /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/teams/{team_id_or_slug}/\",\n \"DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/teams/{team_id_or_slug}/\",\n \"POST /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/user-feedback/\",\n \"GET /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/projects/\",\n \"POST /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/projects/\",\n ],\n },\n {\n name: \"team:admin\",\n rules: [\n \"PUT /api/0/organizations/{organization_id_or_slug}/members/{member_id}/teams/{team_id_or_slug}/\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/members/{member_id}/teams/{team_id_or_slug}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/scim/v2/Groups\",\n \"POST /api/0/organizations/{organization_id_or_slug}/scim/v2/Groups\",\n \"GET /api/0/organizations/{organization_id_or_slug}/scim/v2/Groups/{team_id_or_slug}\",\n \"PATCH /api/0/organizations/{organization_id_or_slug}/scim/v2/Groups/{team_id_or_slug}\",\n \"DELETE /api/0/organizations/{organization_id_or_slug}/scim/v2/Groups/{team_id_or_slug}\",\n \"GET /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/\",\n \"PUT /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/\",\n \"DELETE /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/\",\n \"POST /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/external-teams/\",\n \"PUT /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/external-teams/{external_team_id}/\",\n \"DELETE /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/external-teams/{external_team_id}/\",\n \"GET /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/members/\",\n ],\n },\n {\n name: \"team:read\",\n rules: [\n \"GET /api/0/organizations/{organization_id_or_slug}/scim/v2/Groups\",\n \"GET /api/0/organizations/{organization_id_or_slug}/scim/v2/Groups/{team_id_or_slug}\",\n \"GET /api/0/sentry-apps/{sentry_app_id_or_slug}/\",\n \"GET /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/\",\n \"GET /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/members/\",\n ],\n },\n {\n name: \"team:write\",\n rules: [\n \"POST /api/0/organizations/{organization_id_or_slug}/members/{member_id}/teams/{team_id_or_slug}/\",\n \"PUT /api/0/organizations/{organization_id_or_slug}/members/{member_id}/teams/{team_id_or_slug}/\",\n \"GET /api/0/organizations/{organization_id_or_slug}/scim/v2/Groups\",\n \"POST /api/0/organizations/{organization_id_or_slug}/scim/v2/Groups\",\n \"GET /api/0/organizations/{organization_id_or_slug}/scim/v2/Groups/{team_id_or_slug}\",\n \"PATCH /api/0/organizations/{organization_id_or_slug}/scim/v2/Groups/{team_id_or_slug}\",\n \"POST /api/0/organizations/{organization_id_or_slug}/teams/\",\n \"GET /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/\",\n \"PUT /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/\",\n \"POST /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/external-teams/\",\n \"PUT /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/external-teams/{external_team_id}/\",\n \"GET /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/members/\",\n ],\n },\n ],\n },\n ],\n};\n","// Auto-generated from SerpApi docs.\n// Source: https://serpapi.com/search-api\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:serpapi\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const serpapiFirewall: FirewallConfig = {\n name: \"serpapi\",\n description: \"SerpApi\",\n placeholders: {\n SERPAPI_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCof\",\n },\n apis: [\n {\n base: \"https://serpapi.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.SERPAPI_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Short.io API docs.\n// Source: https://developers.short.io/docs/cre\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:shortio\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const shortioFirewall: FirewallConfig = {\n name: \"shortio\",\n description: \"Short.io API\",\n placeholders: {\n SHORTIO_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalC\",\n },\n apis: [\n {\n base: \"https://api.short.io\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.SHORTIO_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from SimilarWeb API docs.\n// Source: https://docs.similarweb.com/api-v5/getting-started/authentication\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:similarweb\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const similarwebFirewall: FirewallConfig = {\n name: \"similarweb\",\n description: \"SimilarWeb API\",\n placeholders: {\n SIMILARWEB_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSa\",\n },\n apis: [\n {\n base: \"https://api.similarweb.com\",\n auth: {\n headers: {\n \"api-key\": \"${{ secrets.SIMILARWEB_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Spotify Web API docs.\n// Source: https://developer.spotify.com/documentation/web-api\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:spotify\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const spotifyFirewall: FirewallConfig = {\n name: \"spotify\",\n description: \"Spotify Web API\",\n placeholders: {\n SPOTIFY_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLo\",\n },\n apis: [\n {\n base: \"https://api.spotify.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.SPOTIFY_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Strava API docs.\n// Source: https://developers.strava.com/docs/reference/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:strava\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const stravaFirewall: FirewallConfig = {\n name: \"strava\",\n description: \"Strava API\",\n placeholders: {\n STRAVA_TOKEN:\n \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffe\",\n },\n apis: [\n {\n base: \"https://www.strava.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.STRAVA_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Stripe API docs.\n// Source: https://docs.stripe.com/api/authentication\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:stripe\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const stripeFirewall: FirewallConfig = {\n name: \"stripe\",\n description: \"Stripe API\",\n placeholders: {\n STRIPE_TOKEN: \"sk_live_CoffeeSafeLocalCoffeeSafeLocalCoff\",\n },\n apis: [\n {\n base: \"https://api.stripe.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.STRIPE_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Supabase Management API docs.\n// Source: https://supabase.com/docs/reference/api/introduction\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:supabase\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const supabaseFirewall: FirewallConfig = {\n name: \"supabase\",\n description: \"Supabase Management API\",\n placeholders: {\n SUPABASE_TOKEN: \"sbp_oauth_c0ffee5afe10ca1c0ffee5afe10ca1c0ffee5afe\",\n },\n apis: [\n {\n base: \"https://api.supabase.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.SUPABASE_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Supadata API docs.\n// Source: https://docs.supadata.ai/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:supadata\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const supadataFirewall: FirewallConfig = {\n name: \"supadata\",\n description: \"Supadata API\",\n placeholders: {\n SUPADATA_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSaf\",\n },\n apis: [\n {\n base: \"https://api.supadata.ai\",\n auth: {\n headers: {\n \"x-api-key\": \"${{ secrets.SUPADATA_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Tavily API docs.\n// Source: https://docs.tavily.com/documentation/api-reference/introduction\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:tavily\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const tavilyFirewall: FirewallConfig = {\n name: \"tavily\",\n description: \"Tavily API\",\n placeholders: {\n TAVILY_TOKEN: \"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\",\n },\n apis: [\n {\n base: \"https://api.tavily.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.TAVILY_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from tl;dv API docs.\n// Source: https://doc.tldv.io/index.html\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:tldv\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const tldvFirewall: FirewallConfig = {\n name: \"tldv\",\n description: \"tl;dv API\",\n placeholders: {\n TLDV_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSaf\",\n },\n apis: [\n {\n base: \"https://pasta.tldv.io\",\n auth: {\n headers: {\n \"x-api-key\": \"${{ secrets.TLDV_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Todoist API docs.\n// Source: https://developer.todoist.com/guides/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:todoist\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const todoistFirewall: FirewallConfig = {\n name: \"todoist\",\n description: \"Todoist API\",\n placeholders: {\n TODOIST_TOKEN: \"c0ffee5afe10ca1c0ffee5afe10ca1c0ffee5af\",\n },\n apis: [\n {\n base: \"https://api.todoist.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.TODOIST_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Twenty CRM API docs.\n// Source: https://docs.twenty.com/developers/api-and-webhooks/api\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:twenty\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const twentyFirewall: FirewallConfig = {\n name: \"twenty\",\n description: \"Twenty CRM API\",\n placeholders: {\n TWENTY_TOKEN:\n \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJDb2ZmZWVTYWZlTG9jYWxDb2ZmZWVTYWZlTG9jYWxDbyIsInR5cGUiOiJBUElfS0VZIiwid29ya3NwYWNlSWQiOiJDb2ZmZWVTYWZlTG9jYWxDb2YifQ.CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLo\",\n },\n apis: [\n {\n base: \"https://api.twenty.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.TWENTY_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from v0 API docs.\n// Source: https://v0.dev/docs/api/platform/quickstart\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:v0\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const v0Firewall: FirewallConfig = {\n name: \"v0\",\n description: \"v0 API\",\n placeholders: {\n V0_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSaf\",\n },\n apis: [\n {\n base: \"https://api.v0.dev\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.V0_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Vercel's official OpenAPI spec.\n// Source: https://openapi.vercel.sh/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:vercel\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const vercelFirewall: FirewallConfig = {\n name: \"vercel\",\n description: \"Vercel API\",\n placeholders: {\n VERCEL_TOKEN:\n \"vcp_CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeL\",\n },\n apis: [\n {\n base: \"https://api.vercel.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.VERCEL_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"access-groups:read\",\n rules: [\n \"GET /v1/access-groups\",\n \"GET /v1/access-groups/{accessGroupIdOrName}/projects/{projectId}\",\n \"GET /v1/access-groups/{idOrName}\",\n \"GET /v1/access-groups/{idOrName}/members\",\n \"GET /v1/access-groups/{idOrName}/projects\",\n ],\n },\n {\n name: \"access-groups:write\",\n rules: [\n \"POST /v1/access-groups\",\n \"POST /v1/access-groups/{accessGroupIdOrName}/projects\",\n \"PATCH /v1/access-groups/{accessGroupIdOrName}/projects/{projectId}\",\n \"DELETE /v1/access-groups/{accessGroupIdOrName}/projects/{projectId}\",\n \"POST /v1/access-groups/{idOrName}\",\n \"DELETE /v1/access-groups/{idOrName}\",\n ],\n },\n {\n name: \"aliases:read\",\n rules: [\n \"GET /v2/deployments/{id}/aliases\",\n \"GET /v4/aliases\",\n \"GET /v4/aliases/{idOrAlias}\",\n ],\n },\n {\n name: \"aliases:write\",\n rules: [\n \"PATCH /aliases/{id}/protection-bypass\",\n \"DELETE /v2/aliases/{aliasId}\",\n \"POST /v2/deployments/{id}/aliases\",\n ],\n },\n {\n name: \"api-observability:read\",\n rules: [\"GET /v1/observability/manage/configuration/projects\"],\n },\n {\n name: \"api-observability:write\",\n rules: [\n \"PUT /v1/observability/manage/configuration/projects/{projectIdOrName}\",\n ],\n },\n {\n name: \"artifacts:read\",\n rules: [\n \"GET /v8/artifacts/status\",\n \"GET /v8/artifacts/{hash}\",\n \"HEAD /v8/artifacts/{hash}\",\n ],\n },\n {\n name: \"artifacts:write\",\n rules: [\n \"POST /v8/artifacts\",\n \"POST /v8/artifacts/events\",\n \"PUT /v8/artifacts/{hash}\",\n ],\n },\n {\n name: \"authentication:read\",\n rules: [\"GET /v5/user/tokens/{tokenId}\", \"GET /v6/user/tokens\"],\n },\n {\n name: \"authentication:write\",\n rules: [\"POST /v3/user/tokens\", \"DELETE /v3/user/tokens/{tokenId}\"],\n },\n {\n name: \"billing:read\",\n rules: [\n \"GET /v1/billing/charges\",\n \"GET /v1/billing/contract-commitments\",\n ],\n },\n {\n name: \"billing:write\",\n rules: [\"POST /v1/billing/buy\"],\n },\n {\n name: \"bulk-redirects:read\",\n rules: [\"GET /v1/bulk-redirects\", \"GET /v1/bulk-redirects/versions\"],\n },\n {\n name: \"bulk-redirects:write\",\n rules: [\n \"PUT /v1/bulk-redirects\",\n \"PATCH /v1/bulk-redirects\",\n \"DELETE /v1/bulk-redirects\",\n \"POST /v1/bulk-redirects/restore\",\n \"POST /v1/bulk-redirects/versions\",\n ],\n },\n {\n name: \"certs:read\",\n rules: [\"GET /v8/certs/{id}\"],\n },\n {\n name: \"certs:write\",\n rules: [\"POST /v8/certs\", \"PUT /v8/certs\", \"DELETE /v8/certs/{id}\"],\n },\n {\n name: \"checks-v2:read\",\n rules: [\n \"GET /v2/deployments/{deploymentId}/check-runs\",\n \"GET /v2/deployments/{deploymentId}/check-runs/{checkRunId}\",\n \"GET /v2/projects/{projectIdOrName}/checks\",\n \"GET /v2/projects/{projectIdOrName}/checks/{checkId}\",\n \"GET /v2/projects/{projectIdOrName}/checks/{checkId}/runs\",\n ],\n },\n {\n name: \"checks-v2:write\",\n rules: [\n \"POST /v2/deployments/{deploymentId}/check-runs\",\n \"PATCH /v2/deployments/{deploymentId}/check-runs/{checkRunId}\",\n \"POST /v2/projects/{projectIdOrName}/checks\",\n \"PATCH /v2/projects/{projectIdOrName}/checks/{checkId}\",\n \"DELETE /v2/projects/{projectIdOrName}/checks/{checkId}\",\n ],\n },\n {\n name: \"checks:read\",\n rules: [\n \"GET /v1/deployments/{deploymentId}/checks\",\n \"GET /v1/deployments/{deploymentId}/checks/{checkId}\",\n ],\n },\n {\n name: \"checks:write\",\n rules: [\n \"POST /v1/deployments/{deploymentId}/checks\",\n \"PATCH /v1/deployments/{deploymentId}/checks/{checkId}\",\n \"POST /v1/deployments/{deploymentId}/checks/{checkId}/rerequest\",\n ],\n },\n {\n name: \"connect:read\",\n rules: [\n \"GET /v1/connect/networks\",\n \"GET /v1/connect/networks/{networkId}\",\n ],\n },\n {\n name: \"connect:write\",\n rules: [\n \"POST /v1/connect/networks\",\n \"PATCH /v1/connect/networks/{networkId}\",\n \"DELETE /v1/connect/networks/{networkId}\",\n \"PATCH /v1/projects/{idOrName}/shared-connect-links\",\n ],\n },\n {\n name: \"deployments:read\",\n rules: [\n \"GET /v13/deployments/{idOrUrl}\",\n \"GET /v3/deployments/{idOrUrl}/events\",\n \"GET /v6/deployments\",\n \"GET /v6/deployments/{id}/files\",\n \"GET /v8/deployments/{id}/files/{fileId}\",\n ],\n },\n {\n name: \"deployments:write\",\n rules: [\n \"PATCH /v1/deployments/{deploymentId}/integrations/{integrationConfigurationId}/resources/{resourceId}/actions/{action}\",\n \"PATCH /v12/deployments/{id}/cancel\",\n \"POST /v13/deployments\",\n \"DELETE /v13/deployments/{id}\",\n \"POST /v2/files\",\n ],\n },\n {\n name: \"dns:read\",\n rules: [\"GET /v5/domains/{domain}/records\"],\n },\n {\n name: \"dns:write\",\n rules: [\n \"PATCH /v1/domains/records/{recordId}\",\n \"POST /v2/domains/{domain}/records\",\n \"DELETE /v2/domains/{domain}/records/{recordId}\",\n ],\n },\n {\n name: \"domains-registrar:read\",\n rules: [\n \"GET /v1/registrar/domains/{domain}/auth-code\",\n \"GET /v1/registrar/domains/{domain}/availability\",\n \"GET /v1/registrar/domains/{domain}/contact-info/schema\",\n \"GET /v1/registrar/domains/{domain}/price\",\n \"GET /v1/registrar/domains/{domain}/transfer\",\n \"GET /v1/registrar/orders/{orderId}\",\n \"GET /v1/registrar/tlds/supported\",\n \"GET /v1/registrar/tlds/{tld}\",\n \"GET /v1/registrar/tlds/{tld}/price\",\n ],\n },\n {\n name: \"domains-registrar:write\",\n rules: [\n \"POST /v1/registrar/domains/availability\",\n \"POST /v1/registrar/domains/buy\",\n \"PATCH /v1/registrar/domains/{domain}/auto-renew\",\n \"POST /v1/registrar/domains/{domain}/buy\",\n \"PATCH /v1/registrar/domains/{domain}/nameservers\",\n \"POST /v1/registrar/domains/{domain}/renew\",\n \"POST /v1/registrar/domains/{domain}/transfer\",\n ],\n },\n {\n name: \"domains:read\",\n rules: [\n \"GET /v5/domains\",\n \"GET /v5/domains/{domain}\",\n \"GET /v6/domains/{domain}/config\",\n ],\n },\n {\n name: \"domains:write\",\n rules: [\n \"PATCH /v3/domains/{domain}\",\n \"DELETE /v6/domains/{domain}\",\n \"POST /v7/domains\",\n ],\n },\n {\n name: \"drains:read\",\n rules: [\"GET /v1/drains\", \"GET /v1/drains/{id}\"],\n },\n {\n name: \"drains:write\",\n rules: [\n \"POST /v1/drains\",\n \"POST /v1/drains/test\",\n \"PATCH /v1/drains/{id}\",\n \"DELETE /v1/drains/{id}\",\n ],\n },\n {\n name: \"edge-cache:write\",\n rules: [\n \"POST /v1/edge-cache/dangerously-delete-by-src-images\",\n \"POST /v1/edge-cache/dangerously-delete-by-tags\",\n \"POST /v1/edge-cache/invalidate-by-src-images\",\n \"POST /v1/edge-cache/invalidate-by-tags\",\n ],\n },\n {\n name: \"edge-config:read\",\n rules: [\n \"GET /v1/edge-config\",\n \"GET /v1/edge-config/{edgeConfigId}\",\n \"GET /v1/edge-config/{edgeConfigId}/backups\",\n \"GET /v1/edge-config/{edgeConfigId}/backups/{edgeConfigBackupVersionId}\",\n \"GET /v1/edge-config/{edgeConfigId}/item/{edgeConfigItemKey}\",\n \"GET /v1/edge-config/{edgeConfigId}/items\",\n \"GET /v1/edge-config/{edgeConfigId}/schema\",\n \"GET /v1/edge-config/{edgeConfigId}/token/{token}\",\n \"GET /v1/edge-config/{edgeConfigId}/tokens\",\n ],\n },\n {\n name: \"edge-config:write\",\n rules: [\n \"POST /v1/edge-config\",\n \"PUT /v1/edge-config/{edgeConfigId}\",\n \"DELETE /v1/edge-config/{edgeConfigId}\",\n \"PATCH /v1/edge-config/{edgeConfigId}/items\",\n \"POST /v1/edge-config/{edgeConfigId}/schema\",\n \"DELETE /v1/edge-config/{edgeConfigId}/schema\",\n \"POST /v1/edge-config/{edgeConfigId}/token\",\n \"DELETE /v1/edge-config/{edgeConfigId}/tokens\",\n ],\n },\n {\n name: \"environment:read\",\n rules: [\n \"GET /v1/env\",\n \"GET /v1/env/{id}\",\n \"GET /v9/projects/{idOrName}/custom-environments\",\n \"GET /v9/projects/{idOrName}/custom-environments/{environmentSlugOrId}\",\n ],\n },\n {\n name: \"environment:write\",\n rules: [\n \"POST /v1/env\",\n \"PATCH /v1/env\",\n \"DELETE /v1/env\",\n \"PATCH /v1/env/{id}/unlink/{projectId}\",\n \"POST /v9/projects/{idOrName}/custom-environments\",\n \"PATCH /v9/projects/{idOrName}/custom-environments/{environmentSlugOrId}\",\n \"DELETE /v9/projects/{idOrName}/custom-environments/{environmentSlugOrId}\",\n ],\n },\n {\n name: \"feature-flags:read\",\n rules: [\n \"GET /v1/deployments/{deploymentId}/feature-flags\",\n \"GET /v1/projects/{projectIdOrName}/feature-flags/flags\",\n \"GET /v1/projects/{projectIdOrName}/feature-flags/flags/{flagIdOrSlug}\",\n \"GET /v1/projects/{projectIdOrName}/feature-flags/flags/{flagIdOrSlug}/versions\",\n \"GET /v1/projects/{projectIdOrName}/feature-flags/sdk-keys\",\n \"GET /v1/projects/{projectIdOrName}/feature-flags/segments\",\n \"GET /v1/projects/{projectIdOrName}/feature-flags/segments/{segmentIdOrSlug}\",\n \"GET /v1/projects/{projectIdOrName}/feature-flags/settings\",\n \"GET /v1/teams/{teamId}/feature-flags/flags\",\n \"GET /v1/teams/{teamId}/feature-flags/settings\",\n ],\n },\n {\n name: \"feature-flags:write\",\n rules: [\n \"PUT /v1/projects/{projectIdOrName}/feature-flags/flags\",\n \"PATCH /v1/projects/{projectIdOrName}/feature-flags/flags/{flagIdOrSlug}\",\n \"DELETE /v1/projects/{projectIdOrName}/feature-flags/flags/{flagIdOrSlug}\",\n \"PUT /v1/projects/{projectIdOrName}/feature-flags/sdk-keys\",\n \"DELETE /v1/projects/{projectIdOrName}/feature-flags/sdk-keys/{hashKey}\",\n \"PUT /v1/projects/{projectIdOrName}/feature-flags/segments\",\n \"PATCH /v1/projects/{projectIdOrName}/feature-flags/segments/{segmentIdOrSlug}\",\n \"DELETE /v1/projects/{projectIdOrName}/feature-flags/segments/{segmentIdOrSlug}\",\n \"PATCH /v1/projects/{projectIdOrName}/feature-flags/settings\",\n ],\n },\n {\n name: \"integrations:read\",\n rules: [\n \"GET /v1/integrations/configuration/{id}\",\n \"GET /v1/integrations/configuration/{id}/products\",\n \"GET /v1/integrations/configurations\",\n \"GET /v1/integrations/git-namespaces\",\n \"GET /v1/integrations/integration/{integrationIdOrSlug}/products/{productIdOrSlug}/plans\",\n \"GET /v1/integrations/search-repo\",\n ],\n },\n {\n name: \"integrations:write\",\n rules: [\n \"PATCH /v1/deployments/{deploymentId}/integrations/{integrationConfigurationId}/resources/{resourceId}/actions/{action}\",\n \"DELETE /v1/integrations/configuration/{id}\",\n \"POST /v1/integrations/installations/{integrationConfigurationId}/resources/{resourceId}/connections\",\n \"POST /v1/storage/stores/integration/direct\",\n ],\n },\n {\n name: \"logDrains:read\",\n rules: [\n \"GET /v1/log-drains\",\n \"GET /v1/log-drains/{id}\",\n \"GET /v2/integrations/log-drains\",\n ],\n },\n {\n name: \"logDrains:write\",\n rules: [\n \"DELETE /v1/integrations/log-drains/{id}\",\n \"POST /v1/log-drains\",\n \"DELETE /v1/log-drains/{id}\",\n \"POST /v2/integrations/log-drains\",\n ],\n },\n {\n name: \"logs:read\",\n rules: [\n \"GET /v1/projects/{projectId}/deployments/{deploymentId}/runtime-logs\",\n ],\n },\n {\n name: \"marketplace:read\",\n rules: [\n \"GET /v1/installations/{integrationConfigurationId}/account\",\n \"GET /v1/installations/{integrationConfigurationId}/billing/invoices/{invoiceId}\",\n \"GET /v1/installations/{integrationConfigurationId}/member/{memberId}\",\n \"GET /v1/installations/{integrationConfigurationId}/resources\",\n \"GET /v1/installations/{integrationConfigurationId}/resources/{resourceId}\",\n \"GET /v1/installations/{integrationConfigurationId}/resources/{resourceId}/experimentation/edge-config\",\n \"HEAD /v1/installations/{integrationConfigurationId}/resources/{resourceId}/experimentation/edge-config\",\n ],\n },\n {\n name: \"marketplace:write\",\n rules: [\n \"PATCH /v1/installations/{integrationConfigurationId}\",\n \"POST /v1/installations/{integrationConfigurationId}/billing\",\n \"POST /v1/installations/{integrationConfigurationId}/billing/balance\",\n \"POST /v1/installations/{integrationConfigurationId}/billing/finalize\",\n \"POST /v1/installations/{integrationConfigurationId}/billing/invoices\",\n \"POST /v1/installations/{integrationConfigurationId}/billing/invoices/{invoiceId}/actions\",\n \"POST /v1/installations/{integrationConfigurationId}/events\",\n \"PUT /v1/installations/{integrationConfigurationId}/products/{integrationProductIdOrSlug}/resources/{resourceId}/secrets\",\n \"PUT /v1/installations/{integrationConfigurationId}/resources/{resourceId}\",\n \"PATCH /v1/installations/{integrationConfigurationId}/resources/{resourceId}\",\n \"DELETE /v1/installations/{integrationConfigurationId}/resources/{resourceId}\",\n \"PUT /v1/installations/{integrationConfigurationId}/resources/{resourceId}/experimentation/edge-config\",\n \"POST /v1/installations/{integrationConfigurationId}/resources/{resourceId}/experimentation/items\",\n \"PATCH /v1/installations/{integrationConfigurationId}/resources/{resourceId}/experimentation/items/{itemId}\",\n \"DELETE /v1/installations/{integrationConfigurationId}/resources/{resourceId}/experimentation/items/{itemId}\",\n \"PUT /v1/installations/{integrationConfigurationId}/resources/{resourceId}/secrets\",\n ],\n },\n {\n name: \"project-routes:read\",\n rules: [\n \"GET /v1/projects/{projectId}/routes\",\n \"GET /v1/projects/{projectId}/routes/versions\",\n ],\n },\n {\n name: \"project-routes:write\",\n rules: [\n \"POST /v1/projects/{projectId}/routes\",\n \"PUT /v1/projects/{projectId}/routes\",\n \"DELETE /v1/projects/{projectId}/routes\",\n \"POST /v1/projects/{projectId}/routes/generate\",\n \"POST /v1/projects/{projectId}/routes/versions\",\n \"PATCH /v1/projects/{projectId}/routes/{routeId}\",\n ],\n },\n {\n name: \"projectMembers:read\",\n rules: [\"GET /v1/projects/{idOrName}/members\"],\n },\n {\n name: \"projectMembers:write\",\n rules: [\n \"POST /v1/projects/{idOrName}/members\",\n \"DELETE /v1/projects/{idOrName}/members/{uid}\",\n ],\n },\n {\n name: \"projects:read\",\n rules: [\n \"GET /v1/projects/{idOrName}/env/{id}\",\n \"GET /v1/projects/{projectId}/promote/aliases\",\n \"GET /v10/projects\",\n \"GET /v10/projects/{idOrName}/env\",\n \"GET /v9/projects/{idOrName}\",\n \"GET /v9/projects/{idOrName}/domains\",\n \"GET /v9/projects/{idOrName}/domains/{domain}\",\n ],\n },\n {\n name: \"projects:write\",\n rules: [\n \"PUT /projects/transfer-request/{code}\",\n \"POST /projects/{idOrName}/transfer-request\",\n \"POST /v1/projects/{idOrName}/domains/{domain}/move\",\n \"DELETE /v1/projects/{idOrName}/env\",\n \"PATCH /v1/projects/{idOrName}/protection-bypass\",\n \"POST /v1/projects/{projectId}/pause\",\n \"POST /v1/projects/{projectId}/rollback/{deploymentId}\",\n \"POST /v1/projects/{projectId}/unpause\",\n \"POST /v10/projects/{idOrName}/domains\",\n \"POST /v10/projects/{idOrName}/env\",\n \"POST /v10/projects/{projectId}/promote/{deploymentId}\",\n \"POST /v11/projects\",\n \"PATCH /v9/projects/{idOrName}\",\n \"DELETE /v9/projects/{idOrName}\",\n \"PATCH /v9/projects/{idOrName}/domains/{domain}\",\n \"DELETE /v9/projects/{idOrName}/domains/{domain}\",\n \"POST /v9/projects/{idOrName}/domains/{domain}/verify\",\n \"PATCH /v9/projects/{idOrName}/env/{id}\",\n \"DELETE /v9/projects/{idOrName}/env/{id}\",\n ],\n },\n {\n name: \"rolling-release:read\",\n rules: [\n \"GET /v1/projects/{idOrName}/rolling-release\",\n \"GET /v1/projects/{idOrName}/rolling-release/billing\",\n \"GET /v1/projects/{idOrName}/rolling-release/config\",\n ],\n },\n {\n name: \"rolling-release:write\",\n rules: [\n \"POST /v1/projects/{idOrName}/rolling-release/approve-stage\",\n \"POST /v1/projects/{idOrName}/rolling-release/complete\",\n \"PATCH /v1/projects/{idOrName}/rolling-release/config\",\n \"DELETE /v1/projects/{idOrName}/rolling-release/config\",\n ],\n },\n {\n name: \"sandboxes-v2-beta:read\",\n rules: [\n \"GET /v2/sandboxes\",\n \"GET /v2/sandboxes/sessions\",\n \"GET /v2/sandboxes/sessions/{sessionId}\",\n \"GET /v2/sandboxes/sessions/{sessionId}/cmd\",\n \"GET /v2/sandboxes/sessions/{sessionId}/cmd/{cmdId}\",\n \"GET /v2/sandboxes/sessions/{sessionId}/cmd/{cmdId}/logs\",\n \"GET /v2/sandboxes/snapshots\",\n \"GET /v2/sandboxes/snapshots/{snapshotId}\",\n \"GET /v2/sandboxes/{name}\",\n ],\n },\n {\n name: \"sandboxes-v2-beta:write\",\n rules: [\n \"POST /v2/sandboxes\",\n \"POST /v2/sandboxes/sessions/{sessionId}/cmd\",\n \"POST /v2/sandboxes/sessions/{sessionId}/cmd/{cmdId}/kill\",\n \"POST /v2/sandboxes/sessions/{sessionId}/extend-timeout\",\n \"POST /v2/sandboxes/sessions/{sessionId}/fs/mkdir\",\n \"POST /v2/sandboxes/sessions/{sessionId}/fs/read\",\n \"POST /v2/sandboxes/sessions/{sessionId}/fs/write\",\n \"POST /v2/sandboxes/sessions/{sessionId}/network-policy\",\n \"POST /v2/sandboxes/sessions/{sessionId}/snapshot\",\n \"POST /v2/sandboxes/sessions/{sessionId}/stop\",\n \"DELETE /v2/sandboxes/snapshots/{snapshotId}\",\n \"PATCH /v2/sandboxes/{name}\",\n \"DELETE /v2/sandboxes/{name}\",\n ],\n },\n {\n name: \"sandboxes:read\",\n rules: [\n \"GET /v1/sandboxes\",\n \"GET /v1/sandboxes/snapshots\",\n \"GET /v1/sandboxes/snapshots/{snapshotId}\",\n \"GET /v1/sandboxes/{sandboxId}\",\n \"GET /v1/sandboxes/{sandboxId}/cmd\",\n \"GET /v1/sandboxes/{sandboxId}/cmd/{cmdId}\",\n \"GET /v1/sandboxes/{sandboxId}/cmd/{cmdId}/logs\",\n ],\n },\n {\n name: \"sandboxes:write\",\n rules: [\n \"POST /v1/sandboxes\",\n \"DELETE /v1/sandboxes/snapshots/{snapshotId}\",\n \"POST /v1/sandboxes/{sandboxId}/cmd\",\n \"POST /v1/sandboxes/{sandboxId}/extend-timeout\",\n \"POST /v1/sandboxes/{sandboxId}/fs/mkdir\",\n \"POST /v1/sandboxes/{sandboxId}/fs/read\",\n \"POST /v1/sandboxes/{sandboxId}/fs/write\",\n \"POST /v1/sandboxes/{sandboxId}/network-policy\",\n \"POST /v1/sandboxes/{sandboxId}/snapshot\",\n \"POST /v1/sandboxes/{sandboxId}/stop\",\n \"POST /v1/sandboxes/{sandboxId}/{cmdId}/kill\",\n ],\n },\n {\n name: \"security:read\",\n rules: [\n \"GET /v1/security/firewall/attack-status\",\n \"GET /v1/security/firewall/bypass\",\n \"GET /v1/security/firewall/config/{configVersion}\",\n ],\n },\n {\n name: \"security:write\",\n rules: [\n \"POST /v1/security/attack-mode\",\n \"POST /v1/security/firewall/bypass\",\n \"DELETE /v1/security/firewall/bypass\",\n \"PUT /v1/security/firewall/config\",\n \"PATCH /v1/security/firewall/config\",\n ],\n },\n {\n name: \"static-ips:write\",\n rules: [\"PATCH /v1/projects/{idOrName}/shared-connect-links\"],\n },\n {\n name: \"teams:read\",\n rules: [\n \"GET /v1/teams/{teamId}/request/{userId}\",\n \"GET /v2/teams\",\n \"GET /v2/teams/{teamId}\",\n \"GET /v3/teams/{teamId}/members\",\n ],\n },\n {\n name: \"teams:write\",\n rules: [\n \"POST /v1/teams\",\n \"DELETE /v1/teams/{teamId}\",\n \"POST /v1/teams/{teamId}/dsync-roles\",\n \"DELETE /v1/teams/{teamId}/invites/{inviteId}\",\n \"POST /v1/teams/{teamId}/members/teams/join\",\n \"PATCH /v1/teams/{teamId}/members/{uid}\",\n \"DELETE /v1/teams/{teamId}/members/{uid}\",\n \"POST /v1/teams/{teamId}/request\",\n \"PATCH /v2/teams/{teamId}\",\n \"POST /v2/teams/{teamId}/members\",\n ],\n },\n {\n name: \"user:read\",\n rules: [\"GET /v1/events/types\", \"GET /v2/user\", \"GET /v3/events\"],\n },\n {\n name: \"user:write\",\n rules: [\"DELETE /v1/user\"],\n },\n {\n name: \"webhooks:read\",\n rules: [\"GET /v1/webhooks\", \"GET /v1/webhooks/{id}\"],\n },\n {\n name: \"webhooks:write\",\n rules: [\"POST /v1/webhooks\", \"DELETE /v1/webhooks/{id}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Webflow API docs.\n// Source: https://developers.webflow.com/data/reference/authentication\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:webflow\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const webflowFirewall: FirewallConfig = {\n name: \"webflow\",\n description: \"Webflow API\",\n placeholders: {\n WEBFLOW_TOKEN:\n \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffe\",\n },\n apis: [\n {\n base: \"https://api.webflow.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.WEBFLOW_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Wix REST API docs.\n// Source: https://dev.wix.com/docs/go-headless/develop-your-project/admin-operations/make-rest-api-calls-with-an-api-key\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:wix\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const wixFirewall: FirewallConfig = {\n name: \"wix\",\n description: \"Wix REST API\",\n placeholders: {\n WIX_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSaf\",\n },\n apis: [\n {\n base: \"https://www.wixapis.com\",\n auth: {\n headers: {\n Authorization: \"${{ secrets.WIX_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Wrike API docs.\n// Source: https://developers.wrike.com/overview/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:wrike\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const wrikeFirewall: FirewallConfig = {\n name: \"wrike\",\n description: \"Wrike Project Management API\",\n placeholders: {\n WRIKE_TOKEN: \"wrkTkn_CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLoca\",\n },\n apis: [\n {\n base: \"https://www.wrike.com\",\n auth: {\n headers: {\n Authorization: \"bearer ${{ secrets.WRIKE_TOKEN }}\",\n },\n },\n permissions: [],\n },\n {\n base: \"https://app-us2.wrike.com\",\n auth: {\n headers: {\n Authorization: \"bearer ${{ secrets.WRIKE_TOKEN }}\",\n },\n },\n permissions: [],\n },\n {\n base: \"https://app-eu.wrike.com\",\n auth: {\n headers: {\n Authorization: \"bearer ${{ secrets.WRIKE_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from X (Twitter) official OpenAPI spec.\n// Source: https://api.twitter.com/2/openapi.json\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:x\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const xFirewall: FirewallConfig = {\n name: \"x\",\n description: \"X (Twitter) API\",\n placeholders: {\n X_TOKEN:\n \"AAAAAAAAAAAAAAAAAAAAAACoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffe\",\n },\n apis: [\n {\n base: \"https://api.x.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.X_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"app-only\",\n description: \"App-only endpoints (no user context required)\",\n rules: [\n \"POST /2/account_activity/replay/webhooks/{webhook_id}/subscriptions/all\",\n \"GET /2/account_activity/subscriptions/count\",\n \"GET /2/account_activity/webhooks/{webhook_id}/subscriptions/all/list\",\n \"DELETE /2/account_activity/webhooks/{webhook_id}/subscriptions/{user_id}/all\",\n \"GET /2/activity/stream\",\n \"GET /2/activity/subscriptions\",\n \"PUT /2/activity/subscriptions/{subscription_id}\",\n \"DELETE /2/activity/subscriptions/{subscription_id}\",\n \"GET /2/compliance/jobs\",\n \"POST /2/compliance/jobs\",\n \"GET /2/compliance/jobs/{id}\",\n \"GET /2/connections\",\n \"DELETE /2/connections\",\n \"DELETE /2/connections/all\",\n \"DELETE /2/connections/{endpoint_id}\",\n \"GET /2/likes/compliance/stream\",\n \"GET /2/likes/firehose/stream\",\n \"GET /2/likes/sample10/stream\",\n \"GET /2/trends/by/woeid/{woeid}\",\n \"GET /2/tweets/compliance/stream\",\n \"GET /2/tweets/counts/all\",\n \"GET /2/tweets/counts/recent\",\n \"GET /2/tweets/firehose/stream\",\n \"GET /2/tweets/firehose/stream/lang/en\",\n \"GET /2/tweets/firehose/stream/lang/ja\",\n \"GET /2/tweets/firehose/stream/lang/ko\",\n \"GET /2/tweets/firehose/stream/lang/pt\",\n \"GET /2/tweets/label/stream\",\n \"GET /2/tweets/sample/stream\",\n \"GET /2/tweets/sample10/stream\",\n \"GET /2/tweets/search/all\",\n \"GET /2/tweets/search/stream\",\n \"GET /2/tweets/search/stream/rules\",\n \"POST /2/tweets/search/stream/rules\",\n \"GET /2/tweets/search/stream/rules/counts\",\n \"GET /2/tweets/search/webhooks\",\n \"POST /2/tweets/search/webhooks/{webhook_id}\",\n \"DELETE /2/tweets/search/webhooks/{webhook_id}\",\n \"GET /2/usage/tweets\",\n \"GET /2/users/compliance/stream\",\n \"GET /2/webhooks\",\n \"POST /2/webhooks\",\n \"POST /2/webhooks/replay\",\n \"PUT /2/webhooks/{webhook_id}\",\n \"DELETE /2/webhooks/{webhook_id}\",\n ],\n },\n {\n name: \"block.read\",\n description: \"View accounts you have blocked.\",\n rules: [\"GET /2/users/{id}/blocking\"],\n },\n {\n name: \"bookmark.read\",\n description: \"Read your bookmarked Posts.\",\n rules: [\n \"GET /2/users/{id}/bookmarks\",\n \"GET /2/users/{id}/bookmarks/folders\",\n \"GET /2/users/{id}/bookmarks/folders/{folder_id}\",\n ],\n },\n {\n name: \"bookmark.write\",\n description: \"Create and delete your bookmarks.\",\n rules: [\n \"POST /2/users/{id}/bookmarks\",\n \"DELETE /2/users/{id}/bookmarks/{tweet_id}\",\n ],\n },\n {\n name: \"dm.read\",\n description: \"Read all your Direct Messages.\",\n rules: [\n \"GET /2/account_activity/webhooks/{webhook_id}/subscriptions/all\",\n \"POST /2/account_activity/webhooks/{webhook_id}/subscriptions/all\",\n \"POST /2/activity/subscriptions\",\n \"GET /2/chat/conversations\",\n \"GET /2/chat/conversations/{id}\",\n \"GET /2/dm_conversations/media/{dm_id}/{media_id}/{resource_id}\",\n \"GET /2/dm_conversations/with/{participant_id}/dm_events\",\n \"GET /2/dm_conversations/{id}/dm_events\",\n \"GET /2/dm_events\",\n \"GET /2/dm_events/{event_id}\",\n \"DELETE /2/dm_events/{event_id}\",\n \"GET /2/users/public_keys\",\n \"GET /2/users/{id}/public_keys\",\n ],\n },\n {\n name: \"dm.write\",\n description: \"Send and manage your Direct Messages.\",\n rules: [\n \"GET /2/account_activity/webhooks/{webhook_id}/subscriptions/all\",\n \"POST /2/account_activity/webhooks/{webhook_id}/subscriptions/all\",\n \"POST /2/chat/conversations/group\",\n \"POST /2/chat/conversations/group/initialize\",\n \"POST /2/chat/conversations/{id}/keys\",\n \"POST /2/chat/conversations/{id}/members\",\n \"POST /2/chat/conversations/{id}/messages\",\n \"POST /2/chat/conversations/{id}/read\",\n \"POST /2/chat/conversations/{id}/typing\",\n \"POST /2/dm_conversations\",\n \"POST /2/dm_conversations/with/{participant_id}/messages\",\n \"POST /2/dm_conversations/{dm_conversation_id}/messages\",\n \"DELETE /2/dm_events/{event_id}\",\n \"POST /2/users/{id}/dm/block\",\n \"POST /2/users/{id}/dm/unblock\",\n \"POST /2/users/{id}/public_keys\",\n ],\n },\n {\n name: \"follows.read\",\n description: \"View accounts you follow and accounts following you.\",\n rules: [\"GET /2/users/{id}/followers\", \"GET /2/users/{id}/following\"],\n },\n {\n name: \"follows.write\",\n description: \"Follow and unfollow accounts on your behalf.\",\n rules: [\n \"POST /2/users/{id}/following\",\n \"DELETE /2/users/{source_user_id}/following/{target_user_id}\",\n ],\n },\n {\n name: \"like.read\",\n description: \"View Posts you have liked and likes you can see.\",\n rules: [\n \"GET /2/tweets/{id}/liking_users\",\n \"GET /2/users/{id}/liked_tweets\",\n ],\n },\n {\n name: \"like.write\",\n description: \"Like and unlike Posts on your behalf.\",\n rules: [\n \"POST /2/users/{id}/likes\",\n \"DELETE /2/users/{id}/likes/{tweet_id}\",\n ],\n },\n {\n name: \"list.read\",\n description:\n \"View Lists, members, and followers of Lists you created or are a member of, including private Lists.\",\n rules: [\n \"GET /2/communities/{id}\",\n \"POST /2/lists\",\n \"GET /2/lists/{id}\",\n \"GET /2/lists/{id}/followers\",\n \"GET /2/lists/{id}/members\",\n \"GET /2/lists/{id}/tweets\",\n \"GET /2/users/{id}/followed_lists\",\n \"GET /2/users/{id}/list_memberships\",\n \"GET /2/users/{id}/owned_lists\",\n \"GET /2/users/{id}/pinned_lists\",\n ],\n },\n {\n name: \"list.write\",\n description: \"Create and manage Lists on your behalf.\",\n rules: [\n \"POST /2/lists\",\n \"PUT /2/lists/{id}\",\n \"DELETE /2/lists/{id}\",\n \"POST /2/lists/{id}/members\",\n \"DELETE /2/lists/{id}/members/{user_id}\",\n \"POST /2/users/{id}/followed_lists\",\n \"DELETE /2/users/{id}/followed_lists/{list_id}\",\n \"POST /2/users/{id}/pinned_lists\",\n \"DELETE /2/users/{id}/pinned_lists/{list_id}\",\n ],\n },\n {\n name: \"media.write\",\n description:\n \"Upload media, such as photos and videos, on your behalf.\",\n rules: [\n \"POST /2/chat/media/upload/initialize\",\n \"POST /2/chat/media/upload/{id}/append\",\n \"POST /2/chat/media/upload/{id}/finalize\",\n \"GET /2/chat/media/{id}/{media_hash_key}\",\n \"POST /2/media/metadata\",\n \"POST /2/media/subtitles\",\n \"DELETE /2/media/subtitles\",\n \"GET /2/media/upload\",\n \"POST /2/media/upload\",\n \"POST /2/media/upload/initialize\",\n \"POST /2/media/upload/{id}/append\",\n \"POST /2/media/upload/{id}/finalize\",\n ],\n },\n {\n name: \"mute.read\",\n description: \"View accounts you have muted.\",\n rules: [\"GET /2/users/{id}/muting\"],\n },\n {\n name: \"mute.write\",\n description: \"Mute and unmute accounts on your behalf.\",\n rules: [\n \"POST /2/users/{id}/muting\",\n \"DELETE /2/users/{source_user_id}/muting/{target_user_id}\",\n ],\n },\n {\n name: \"space.read\",\n description: \"View all Spaces you have access to.\",\n rules: [\n \"GET /2/spaces\",\n \"GET /2/spaces/by/creator_ids\",\n \"GET /2/spaces/search\",\n \"GET /2/spaces/{id}\",\n \"GET /2/spaces/{id}/buyers\",\n \"GET /2/spaces/{id}/tweets\",\n ],\n },\n {\n name: \"timeline.read\",\n description:\n \"View all Custom Timelines you can see, including public Custom Timelines from other developers.\",\n rules: [\"GET /2/users/reposts_of_me\"],\n },\n {\n name: \"tweet.moderate.write\",\n description: \"Hide and unhide replies to your Posts.\",\n rules: [\"PUT /2/tweets/{tweet_id}/hidden\"],\n },\n {\n name: \"tweet.read\",\n description:\n \"View all Posts you can see, including those from protected accounts.\",\n rules: [\n \"GET /2/account_activity/webhooks/{webhook_id}/subscriptions/all\",\n \"POST /2/account_activity/webhooks/{webhook_id}/subscriptions/all\",\n \"POST /2/activity/subscriptions\",\n \"POST /2/chat/conversations/group\",\n \"GET /2/chat/conversations/{id}\",\n \"POST /2/chat/conversations/{id}/keys\",\n \"POST /2/chat/conversations/{id}/members\",\n \"POST /2/chat/conversations/{id}/messages\",\n \"POST /2/chat/conversations/{id}/read\",\n \"POST /2/chat/conversations/{id}/typing\",\n \"GET /2/communities/search\",\n \"GET /2/communities/{id}\",\n \"POST /2/dm_conversations\",\n \"GET /2/dm_conversations/with/{participant_id}/dm_events\",\n \"POST /2/dm_conversations/with/{participant_id}/messages\",\n \"POST /2/dm_conversations/{dm_conversation_id}/messages\",\n \"GET /2/dm_conversations/{id}/dm_events\",\n \"GET /2/dm_events\",\n \"GET /2/dm_events/{event_id}\",\n \"GET /2/insights/28hr\",\n \"GET /2/insights/historical\",\n \"POST /2/lists\",\n \"GET /2/lists/{id}\",\n \"PUT /2/lists/{id}\",\n \"DELETE /2/lists/{id}\",\n \"GET /2/lists/{id}/followers\",\n \"GET /2/lists/{id}/members\",\n \"POST /2/lists/{id}/members\",\n \"DELETE /2/lists/{id}/members/{user_id}\",\n \"GET /2/lists/{id}/tweets\",\n \"GET /2/media\",\n \"GET /2/media/analytics\",\n \"GET /2/media/{media_key}\",\n \"GET /2/news/search\",\n \"GET /2/news/{id}\",\n \"GET /2/notes/search/notes_written\",\n \"GET /2/notes/search/posts_eligible_for_notes\",\n \"GET /2/spaces\",\n \"GET /2/spaces/by/creator_ids\",\n \"GET /2/spaces/search\",\n \"GET /2/spaces/{id}\",\n \"GET /2/spaces/{id}/buyers\",\n \"GET /2/spaces/{id}/tweets\",\n \"GET /2/tweets\",\n \"POST /2/tweets\",\n \"GET /2/tweets/analytics\",\n \"GET /2/tweets/search/recent\",\n \"GET /2/tweets/{id}\",\n \"DELETE /2/tweets/{id}\",\n \"GET /2/tweets/{id}/liking_users\",\n \"GET /2/tweets/{id}/quote_tweets\",\n \"GET /2/tweets/{id}/retweeted_by\",\n \"GET /2/tweets/{id}/retweets\",\n \"PUT /2/tweets/{tweet_id}/hidden\",\n \"GET /2/users\",\n \"GET /2/users/by\",\n \"GET /2/users/by/username/{username}\",\n \"GET /2/users/me\",\n \"GET /2/users/personalized_trends\",\n \"GET /2/users/public_keys\",\n \"GET /2/users/reposts_of_me\",\n \"GET /2/users/search\",\n \"GET /2/users/{id}\",\n \"GET /2/users/{id}/affiliates\",\n \"GET /2/users/{id}/blocking\",\n \"GET /2/users/{id}/bookmarks\",\n \"POST /2/users/{id}/bookmarks\",\n \"GET /2/users/{id}/bookmarks/folders/{folder_id}\",\n \"DELETE /2/users/{id}/bookmarks/{tweet_id}\",\n \"POST /2/users/{id}/dm/block\",\n \"POST /2/users/{id}/dm/unblock\",\n \"GET /2/users/{id}/followed_lists\",\n \"POST /2/users/{id}/followed_lists\",\n \"DELETE /2/users/{id}/followed_lists/{list_id}\",\n \"GET /2/users/{id}/followers\",\n \"GET /2/users/{id}/following\",\n \"POST /2/users/{id}/following\",\n \"GET /2/users/{id}/liked_tweets\",\n \"POST /2/users/{id}/likes\",\n \"DELETE /2/users/{id}/likes/{tweet_id}\",\n \"GET /2/users/{id}/list_memberships\",\n \"GET /2/users/{id}/mentions\",\n \"GET /2/users/{id}/muting\",\n \"POST /2/users/{id}/muting\",\n \"GET /2/users/{id}/owned_lists\",\n \"GET /2/users/{id}/pinned_lists\",\n \"POST /2/users/{id}/pinned_lists\",\n \"DELETE /2/users/{id}/pinned_lists/{list_id}\",\n \"GET /2/users/{id}/public_keys\",\n \"POST /2/users/{id}/public_keys\",\n \"POST /2/users/{id}/retweets\",\n \"DELETE /2/users/{id}/retweets/{source_tweet_id}\",\n \"GET /2/users/{id}/timelines/reverse_chronological\",\n \"GET /2/users/{id}/tweets\",\n \"DELETE /2/users/{source_user_id}/following/{target_user_id}\",\n \"DELETE /2/users/{source_user_id}/muting/{target_user_id}\",\n ],\n },\n {\n name: \"tweet.write\",\n description: \"Post and repost on your behalf.\",\n rules: [\n \"POST /2/evaluate_note\",\n \"POST /2/notes\",\n \"DELETE /2/notes/{id}\",\n \"POST /2/tweets\",\n \"DELETE /2/tweets/{id}\",\n \"POST /2/users/{id}/retweets\",\n \"DELETE /2/users/{id}/retweets/{source_tweet_id}\",\n ],\n },\n {\n name: \"users.read\",\n description:\n \"View any account you can see, including protected accounts.\",\n rules: [\n \"GET /2/account_activity/webhooks/{webhook_id}/subscriptions/all\",\n \"POST /2/account_activity/webhooks/{webhook_id}/subscriptions/all\",\n \"GET /2/chat/conversations\",\n \"POST /2/chat/conversations/group\",\n \"GET /2/chat/conversations/{id}\",\n \"POST /2/chat/conversations/{id}/keys\",\n \"POST /2/chat/conversations/{id}/members\",\n \"POST /2/chat/conversations/{id}/messages\",\n \"POST /2/chat/conversations/{id}/read\",\n \"POST /2/chat/conversations/{id}/typing\",\n \"GET /2/communities/search\",\n \"GET /2/communities/{id}\",\n \"POST /2/dm_conversations\",\n \"GET /2/dm_conversations/with/{participant_id}/dm_events\",\n \"POST /2/dm_conversations/with/{participant_id}/messages\",\n \"POST /2/dm_conversations/{dm_conversation_id}/messages\",\n \"GET /2/dm_conversations/{id}/dm_events\",\n \"GET /2/dm_events\",\n \"GET /2/dm_events/{event_id}\",\n \"POST /2/lists\",\n \"GET /2/lists/{id}\",\n \"PUT /2/lists/{id}\",\n \"DELETE /2/lists/{id}\",\n \"GET /2/lists/{id}/followers\",\n \"GET /2/lists/{id}/members\",\n \"POST /2/lists/{id}/members\",\n \"DELETE /2/lists/{id}/members/{user_id}\",\n \"GET /2/lists/{id}/tweets\",\n \"GET /2/news/search\",\n \"GET /2/news/{id}\",\n \"GET /2/spaces\",\n \"GET /2/spaces/by/creator_ids\",\n \"GET /2/spaces/search\",\n \"GET /2/spaces/{id}\",\n \"GET /2/spaces/{id}/buyers\",\n \"GET /2/spaces/{id}/tweets\",\n \"GET /2/tweets\",\n \"POST /2/tweets\",\n \"GET /2/tweets/analytics\",\n \"GET /2/tweets/search/recent\",\n \"GET /2/tweets/{id}\",\n \"DELETE /2/tweets/{id}\",\n \"GET /2/tweets/{id}/liking_users\",\n \"GET /2/tweets/{id}/quote_tweets\",\n \"GET /2/tweets/{id}/retweeted_by\",\n \"GET /2/tweets/{id}/retweets\",\n \"PUT /2/tweets/{tweet_id}/hidden\",\n \"GET /2/users\",\n \"GET /2/users/by\",\n \"GET /2/users/by/username/{username}\",\n \"GET /2/users/me\",\n \"GET /2/users/personalized_trends\",\n \"GET /2/users/public_keys\",\n \"GET /2/users/search\",\n \"GET /2/users/{id}\",\n \"GET /2/users/{id}/affiliates\",\n \"GET /2/users/{id}/blocking\",\n \"GET /2/users/{id}/bookmarks\",\n \"POST /2/users/{id}/bookmarks\",\n \"GET /2/users/{id}/bookmarks/folders\",\n \"GET /2/users/{id}/bookmarks/folders/{folder_id}\",\n \"DELETE /2/users/{id}/bookmarks/{tweet_id}\",\n \"POST /2/users/{id}/dm/block\",\n \"POST /2/users/{id}/dm/unblock\",\n \"GET /2/users/{id}/followed_lists\",\n \"POST /2/users/{id}/followed_lists\",\n \"DELETE /2/users/{id}/followed_lists/{list_id}\",\n \"GET /2/users/{id}/followers\",\n \"GET /2/users/{id}/following\",\n \"POST /2/users/{id}/following\",\n \"GET /2/users/{id}/liked_tweets\",\n \"POST /2/users/{id}/likes\",\n \"DELETE /2/users/{id}/likes/{tweet_id}\",\n \"GET /2/users/{id}/list_memberships\",\n \"GET /2/users/{id}/mentions\",\n \"GET /2/users/{id}/muting\",\n \"POST /2/users/{id}/muting\",\n \"GET /2/users/{id}/owned_lists\",\n \"GET /2/users/{id}/pinned_lists\",\n \"POST /2/users/{id}/pinned_lists\",\n \"DELETE /2/users/{id}/pinned_lists/{list_id}\",\n \"GET /2/users/{id}/public_keys\",\n \"POST /2/users/{id}/public_keys\",\n \"POST /2/users/{id}/retweets\",\n \"DELETE /2/users/{id}/retweets/{source_tweet_id}\",\n \"GET /2/users/{id}/timelines/reverse_chronological\",\n \"GET /2/users/{id}/tweets\",\n \"DELETE /2/users/{source_user_id}/following/{target_user_id}\",\n \"DELETE /2/users/{source_user_id}/muting/{target_user_id}\",\n ],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Xero API docs.\n// Source: https://developer.xero.com/documentation/guides/oauth2/overview/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:xero\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const xeroFirewall: FirewallConfig = {\n name: \"xero\",\n description: \"Xero API\",\n placeholders: {\n XERO_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLocalCoffeeSaf\",\n },\n apis: [\n {\n base: \"https://api.xero.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.XERO_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from YouTube Data API docs.\n// Source: https://developers.google.com/youtube/v3/getting-started\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:youtube\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const youtubeFirewall: FirewallConfig = {\n name: \"youtube\",\n description: \"YouTube Data API\",\n placeholders: {\n YOUTUBE_TOKEN: \"AIzaSyBCoffeeSafeLocalCoffeeSafeLocalCo\",\n },\n apis: [\n {\n base: \"https://www.googleapis.com/youtube\",\n auth: {\n headers: {\n \"X-Goog-Api-Key\": \"${{ secrets.YOUTUBE_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Zapier NLA API docs.\n// Source: https://nla.zapier.com/docs/authentication/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:zapier\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const zapierFirewall: FirewallConfig = {\n name: \"zapier\",\n description: \"Zapier NLA API\",\n placeholders: {\n ZAPIER_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCoffeeSafeLo\",\n },\n apis: [\n {\n base: \"https://nla.zapier.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.ZAPIER_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from ZapSign API docs.\n// Source: https://docs.zapsign.com.br/english/authentication/autenticacao\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:zapsign\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const zapsignFirewall: FirewallConfig = {\n name: \"zapsign\",\n description: \"ZapSign API\",\n placeholders: {\n ZAPSIGN_TOKEN: \"c0ffee5a-fe10-ca1c-0ffe-e5afe10c\",\n },\n apis: [\n {\n base: \"https://api.zapsign.com.br\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.ZAPSIGN_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from Zendesk API docs.\n// Source: https://developer.zendesk.com/api-reference/\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:zendesk\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const zendeskFirewall: FirewallConfig = {\n name: \"zendesk\",\n description: \"Zendesk Support API\",\n placeholders: {\n ZENDESK_API_TOKEN: \"zkTkn_CoffeeSafeLocalCoffeeSafeLocalCoffeeSa\",\n },\n apis: [\n {\n base: \"https://${{ vars.ZENDESK_SUBDOMAIN }}.zendesk.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.ZENDESK_API_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","// Auto-generated from ZeptoMail API docs.\n// Source: https://www.zoho.com/zeptomail/help/api/email-sending.html\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:zeptomail\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const zeptomailFirewall: FirewallConfig = {\n name: \"zeptomail\",\n description: \"ZeptoMail API\",\n placeholders: {\n ZEPTOMAIL_TOKEN: \"CoffeeSafeLocalCoffeeSafeLocalCo\",\n },\n apis: [\n {\n base: \"https://api.zeptomail.com\",\n auth: {\n headers: {\n Authorization: \"Zoho-enczapikey ${{ secrets.ZEPTOMAIL_TOKEN }}\",\n },\n },\n permissions: [],\n },\n ],\n};\n","/**\n * Builtin firewall configs registry.\n *\n * Generated configs are imported here and exposed as a lookup map.\n * The firewall loader checks this registry before falling back to\n * remote GitHub fetch.\n */\n\nimport type {\n FirewallConfig,\n FirewallPolicies,\n FirewallPolicyValue,\n} from \"../contracts/firewalls\";\nimport type { ConnectorType } from \"../contracts/connectors\";\nimport { slackDefaultAllowed } from \"./slack.generated\";\nimport { getConnectorEnvironmentMapping } from \"../contracts/connectors\";\nimport { agentmailFirewall } from \"./agentmail.generated\";\nimport { ahrefsFirewall } from \"./ahrefs.generated\";\nimport { airtableFirewall } from \"./airtable.generated\";\nimport { apifyFirewall } from \"./apify.generated\";\nimport { asanaFirewall } from \"./asana.generated\";\nimport { atlassianFirewall } from \"./atlassian.generated\";\nimport { axiomFirewall } from \"./axiom.generated\";\nimport { braveSearchFirewall } from \"./brave-search.generated\";\nimport { brevoFirewall } from \"./brevo.generated\";\nimport { brightDataFirewall } from \"./bright-data.generated\";\nimport { browserbaseFirewall } from \"./browserbase.generated\";\nimport { browserlessFirewall } from \"./browserless.generated\";\nimport { calComFirewall } from \"./cal-com.generated\";\nimport { calendlyFirewall } from \"./calendly.generated\";\nimport { canvaFirewall } from \"./canva.generated\";\nimport { chatwootFirewall } from \"./chatwoot.generated\";\nimport { clickupFirewall } from \"./clickup.generated\";\nimport { closeFirewall } from \"./close.generated\";\nimport { cloudflareFirewall } from \"./cloudflare.generated\";\nimport { cronlyticFirewall } from \"./cronlytic.generated\";\nimport { customerIoFirewall } from \"./customer-io.generated\";\nimport { deepseekFirewall } from \"./deepseek.generated\";\nimport { deelFirewall } from \"./deel.generated\";\nimport { devtoFirewall } from \"./devto.generated\";\nimport { difyFirewall } from \"./dify.generated\";\nimport { discordFirewall } from \"./discord.generated\";\nimport { docusignFirewall } from \"./docusign.generated\";\nimport { dropboxFirewall } from \"./dropbox.generated\";\nimport { elevenlabsFirewall } from \"./elevenlabs.generated\";\nimport { exploriumFirewall } from \"./explorium.generated\";\nimport { falFirewall } from \"./fal.generated\";\nimport { figmaFirewall } from \"./figma.generated\";\nimport { firecrawlFirewall } from \"./firecrawl.generated\";\nimport { firefliesFirewall } from \"./fireflies.generated\";\nimport { gammaFirewall } from \"./gamma.generated\";\nimport { garminConnectFirewall } from \"./garmin-connect.generated\";\nimport { githubFirewall } from \"./github.generated\";\nimport { gitlabFirewall } from \"./gitlab.generated\";\nimport { gmailFirewall } from \"./gmail.generated\";\nimport { googleCalendarFirewall } from \"./google-calendar.generated\";\nimport { googleDocsFirewall } from \"./google-docs.generated\";\nimport { googleDriveFirewall } from \"./google-drive.generated\";\nimport { googleSheetsFirewall } from \"./google-sheets.generated\";\nimport { granolaFirewall } from \"./granola.generated\";\nimport { heygenFirewall } from \"./heygen.generated\";\nimport { hubspotFirewall } from \"./hubspot.generated\";\nimport { huggingFaceFirewall } from \"./hugging-face.generated\";\nimport { humeFirewall } from \"./hume.generated\";\nimport { imgurFirewall } from \"./imgur.generated\";\nimport { instagramFirewall } from \"./instagram.generated\";\nimport { instantlyFirewall } from \"./instantly.generated\";\nimport { intercomFirewall } from \"./intercom.generated\";\nimport { intervalsIcuFirewall } from \"./intervals-icu.generated\";\nimport { jotformFirewall } from \"./jotform.generated\";\nimport { kommoFirewall } from \"./kommo.generated\";\nimport { larkFirewall } from \"./lark.generated\";\nimport { lineFirewall } from \"./line.generated\";\nimport { linearFirewall } from \"./linear.generated\";\nimport { loopsFirewall } from \"./loops.generated\";\nimport { mailchimpFirewall } from \"./mailchimp.generated\";\nimport { makeFirewall } from \"./make.generated\";\nimport { mailsacFirewall } from \"./mailsac.generated\";\nimport { mercuryFirewall } from \"./mercury.generated\";\nimport { metabaseFirewall } from \"./metabase.generated\";\nimport { metaAdsFirewall } from \"./meta-ads.generated\";\nimport { minimaxFirewall } from \"./minimax.generated\";\nimport { mondayFirewall } from \"./monday.generated\";\nimport { neonFirewall } from \"./neon.generated\";\nimport { notionFirewall } from \"./notion.generated\";\nimport { openaiFirewall } from \"./openai.generated\";\nimport { outlookCalendarFirewall } from \"./outlook-calendar.generated\";\nimport { outlookMailFirewall } from \"./outlook-mail.generated\";\nimport { pdf4meFirewall } from \"./pdf4me.generated\";\nimport { pdfcoFirewall } from \"./pdfco.generated\";\nimport { pdforgeFirewall } from \"./pdforge.generated\";\nimport { perplexityFirewall } from \"./perplexity.generated\";\nimport { plausibleFirewall } from \"./plausible.generated\";\nimport { podchaserFirewall } from \"./podchaser.generated\";\nimport { posthogFirewall } from \"./posthog.generated\";\nimport { productlaneFirewall } from \"./productlane.generated\";\nimport { prismaPostgresFirewall } from \"./prisma-postgres.generated\";\nimport { pushinatorFirewall } from \"./pushinator.generated\";\nimport { qdrantFirewall } from \"./qdrant.generated\";\nimport { qiitaFirewall } from \"./qiita.generated\";\nimport { redditFirewall } from \"./reddit.generated\";\nimport { reporteiFirewall } from \"./reportei.generated\";\nimport { resendFirewall } from \"./resend.generated\";\nimport { revenuecatFirewall } from \"./revenuecat.generated\";\nimport { runwayFirewall } from \"./runway.generated\";\nimport { salesforceFirewall } from \"./salesforce.generated\";\nimport { scrapeninjaFirewall } from \"./scrapeninja.generated\";\nimport { sentryFirewall } from \"./sentry.generated\";\nimport { serpapiFirewall } from \"./serpapi.generated\";\nimport { shortioFirewall } from \"./shortio.generated\";\nimport { similarwebFirewall } from \"./similarweb.generated\";\nimport { slackFirewall } from \"./slack.generated\";\nimport { spotifyFirewall } from \"./spotify.generated\";\nimport { stravaFirewall } from \"./strava.generated\";\nimport { stripeFirewall } from \"./stripe.generated\";\nimport { supabaseFirewall } from \"./supabase.generated\";\nimport { supadataFirewall } from \"./supadata.generated\";\nimport { tavilyFirewall } from \"./tavily.generated\";\nimport { tldvFirewall } from \"./tldv.generated\";\nimport { todoistFirewall } from \"./todoist.generated\";\nimport { twentyFirewall } from \"./twenty.generated\";\nimport { v0Firewall } from \"./v0.generated\";\nimport { vercelFirewall } from \"./vercel.generated\";\nimport { webflowFirewall } from \"./webflow.generated\";\nimport { wixFirewall } from \"./wix.generated\";\nimport { wrikeFirewall } from \"./wrike.generated\";\nimport { xFirewall } from \"./x.generated\";\nimport { xeroFirewall } from \"./xero.generated\";\nimport { youtubeFirewall } from \"./youtube.generated\";\nimport { zapierFirewall } from \"./zapier.generated\";\nimport { zapsignFirewall } from \"./zapsign.generated\";\nimport { zendeskFirewall } from \"./zendesk.generated\";\nimport { zeptomailFirewall } from \"./zeptomail.generated\";\n\nconst CONNECTOR_FIREWALLS = {\n agentmail: agentmailFirewall,\n ahrefs: ahrefsFirewall,\n airtable: airtableFirewall,\n apify: apifyFirewall,\n asana: asanaFirewall,\n atlassian: atlassianFirewall,\n axiom: axiomFirewall,\n \"brave-search\": braveSearchFirewall,\n brevo: brevoFirewall,\n \"bright-data\": brightDataFirewall,\n browserbase: browserbaseFirewall,\n browserless: browserlessFirewall,\n \"cal-com\": calComFirewall,\n calendly: calendlyFirewall,\n canva: canvaFirewall,\n chatwoot: chatwootFirewall,\n clickup: clickupFirewall,\n close: closeFirewall,\n cloudflare: cloudflareFirewall,\n cronlytic: cronlyticFirewall,\n \"customer-io\": customerIoFirewall,\n deel: deelFirewall,\n deepseek: deepseekFirewall,\n devto: devtoFirewall,\n dify: difyFirewall,\n discord: discordFirewall,\n docusign: docusignFirewall,\n dropbox: dropboxFirewall,\n elevenlabs: elevenlabsFirewall,\n explorium: exploriumFirewall,\n fal: falFirewall,\n figma: figmaFirewall,\n firecrawl: firecrawlFirewall,\n fireflies: firefliesFirewall,\n gamma: gammaFirewall,\n \"garmin-connect\": garminConnectFirewall,\n github: githubFirewall,\n gitlab: gitlabFirewall,\n gmail: gmailFirewall,\n \"google-calendar\": googleCalendarFirewall,\n \"google-docs\": googleDocsFirewall,\n \"google-drive\": googleDriveFirewall,\n \"google-sheets\": googleSheetsFirewall,\n granola: granolaFirewall,\n heygen: heygenFirewall,\n hubspot: hubspotFirewall,\n \"hugging-face\": huggingFaceFirewall,\n hume: humeFirewall,\n imgur: imgurFirewall,\n instagram: instagramFirewall,\n instantly: instantlyFirewall,\n intercom: intercomFirewall,\n \"intervals-icu\": intervalsIcuFirewall,\n jotform: jotformFirewall,\n kommo: kommoFirewall,\n lark: larkFirewall,\n line: lineFirewall,\n linear: linearFirewall,\n loops: loopsFirewall,\n mailchimp: mailchimpFirewall,\n make: makeFirewall,\n mailsac: mailsacFirewall,\n mercury: mercuryFirewall,\n metabase: metabaseFirewall,\n \"meta-ads\": metaAdsFirewall,\n minimax: minimaxFirewall,\n monday: mondayFirewall,\n neon: neonFirewall,\n notion: notionFirewall,\n openai: openaiFirewall,\n \"outlook-calendar\": outlookCalendarFirewall,\n \"outlook-mail\": outlookMailFirewall,\n pdf4me: pdf4meFirewall,\n pdfco: pdfcoFirewall,\n pdforge: pdforgeFirewall,\n perplexity: perplexityFirewall,\n plausible: plausibleFirewall,\n podchaser: podchaserFirewall,\n posthog: posthogFirewall,\n \"prisma-postgres\": prismaPostgresFirewall,\n productlane: productlaneFirewall,\n pushinator: pushinatorFirewall,\n qdrant: qdrantFirewall,\n qiita: qiitaFirewall,\n reddit: redditFirewall,\n reportei: reporteiFirewall,\n resend: resendFirewall,\n revenuecat: revenuecatFirewall,\n runway: runwayFirewall,\n salesforce: salesforceFirewall,\n scrapeninja: scrapeninjaFirewall,\n sentry: sentryFirewall,\n serpapi: serpapiFirewall,\n shortio: shortioFirewall,\n similarweb: similarwebFirewall,\n slack: slackFirewall,\n spotify: spotifyFirewall,\n strava: stravaFirewall,\n stripe: stripeFirewall,\n supabase: supabaseFirewall,\n supadata: supadataFirewall,\n tavily: tavilyFirewall,\n tldv: tldvFirewall,\n todoist: todoistFirewall,\n twenty: twentyFirewall,\n v0: v0Firewall,\n vercel: vercelFirewall,\n webflow: webflowFirewall,\n wix: wixFirewall,\n wrike: wrikeFirewall,\n x: xFirewall,\n xero: xeroFirewall,\n youtube: youtubeFirewall,\n zapier: zapierFirewall,\n zapsign: zapsignFirewall,\n zendesk: zendeskFirewall,\n zeptomail: zeptomailFirewall,\n} as const satisfies Partial<Record<ConnectorType, FirewallConfig>>;\n\n/**\n * Expand firewall placeholders to cover all secret names related to the\n * connector. For each existing placeholder key, find related names via\n * environmentMapping (raw OAuth secret names and sibling aliases) and assign\n * the same placeholder value.\n */\nfunction expandPlaceholders(\n firewall: FirewallConfig,\n connectorType: ConnectorType,\n): FirewallConfig {\n if (!firewall.placeholders) return firewall;\n\n const mapping = getConnectorEnvironmentMapping(connectorType);\n if (Object.keys(mapping).length === 0) return firewall;\n\n const expanded: Record<string, string> = { ...firewall.placeholders };\n\n for (const [key, placeholderValue] of Object.entries(firewall.placeholders)) {\n // key is a mapped env var (e.g. GITHUB_TOKEN)\n // → add the raw secret name and any sibling aliases\n const valueRef = mapping[key];\n if (valueRef?.startsWith(\"$secrets.\")) {\n const rawName = valueRef.slice(\"$secrets.\".length);\n if (!expanded[rawName]) {\n expanded[rawName] = placeholderValue;\n }\n for (const [envVar, ref] of Object.entries(mapping)) {\n if (ref === valueRef && !expanded[envVar]) {\n expanded[envVar] = placeholderValue;\n }\n }\n }\n\n // key is a raw secret name → add all env vars that reference it\n const rawRef = `$secrets.${key}`;\n for (const [envVar, ref] of Object.entries(mapping)) {\n if (ref === rawRef && !expanded[envVar]) {\n expanded[envVar] = placeholderValue;\n }\n }\n }\n\n return { ...firewall, placeholders: expanded };\n}\n\n// Pre-compute expanded placeholders at module load time.\nconst EXPANDED_CONNECTOR_FIREWALLS = Object.fromEntries(\n Object.entries(CONNECTOR_FIREWALLS).map(([type, firewall]) => {\n return [type, expandPlaceholders(firewall, type as ConnectorType)];\n }),\n) as typeof CONNECTOR_FIREWALLS;\n\n/** Connector types that have a firewall config (subset of ConnectorType). */\nexport type FirewallConnectorType = keyof typeof CONNECTOR_FIREWALLS;\n\n/**\n * Extract the union of permission names from a firewall config object.\n * Requires the config to be declared with `as const satisfies FirewallConfig`\n * so that permission name strings are preserved as literal types.\n */\nexport type PermissionNamesOf<T extends FirewallConfig> =\n T[\"apis\"][number] extends { permissions?: infer P }\n ? P extends ReadonlyArray<{ name: infer N }>\n ? N extends string\n ? N\n : never\n : never\n : never;\n\n/**\n * Connector types that do not have a firewall config.\n *\n * When adding a new ConnectorType, place it in either CONNECTOR_FIREWALLS\n * or this union. The compile-time assertions below will fail if a\n * ConnectorType is missing from both, or if a type is listed here\n * that already has a firewall config.\n */\nexport type NonFirewallConnectorType =\n // Basic Auth — proxy cannot do base64 encoding at runtime (#7137)\n | \"htmlcsstoimage\" // Basic Auth (user_id:api_key)\n | \"jira\" // Basic Auth (email:api_token)\n | \"streak\" // Basic Auth (api_key as username, empty password)\n // Signature-based auth — requires computing signatures, not simple header injection\n | \"cloudinary\" // SHA signature in form body + api_key param\n | \"minio\" // AWS Signature V4\n // Webhook URL — token embedded in URL, not auth header\n | \"bitrix\" // token in URL path (/rest/{user_id}/{token}/)\n | \"discord-webhook\" // DISCORD_WEBHOOK_URL\n | \"slack-webhook\" // SLACK_WEBHOOK_URL\n // Other\n | \"computer\" // not an API connector\n | \"jam\"; // no public REST API\n\n/**\n * Compile-time exhaustiveness checks.\n *\n * ValidateNonFirewall: ensures NonFirewallConnectorType only contains\n * connectors that are NOT in FirewallConnectorType.\n *\n * ValidateExhaustive: ensures every ConnectorType is in either\n * FirewallConnectorType or NonFirewallConnectorType.\n */\ntype ValidateNonFirewall<\n T extends Exclude<ConnectorType, FirewallConnectorType> =\n NonFirewallConnectorType,\n> = T;\ntype ValidateExhaustive<\n T extends never = Exclude<\n ConnectorType,\n FirewallConnectorType | NonFirewallConnectorType\n >,\n> = T;\nexport type ConnectorTypeCoverage = ValidateNonFirewall & ValidateExhaustive;\n\n/** Check if a connector type has a firewall config. */\nexport function isFirewallConnectorType(\n type: string,\n): type is FirewallConnectorType {\n return type in CONNECTOR_FIREWALLS;\n}\n\n/** Get the firewall config for a connector type (placeholders pre-expanded). */\nexport function getConnectorFirewall(\n type: FirewallConnectorType,\n): FirewallConfig {\n return EXPANDED_CONNECTOR_FIREWALLS[type];\n}\n\n/**\n * Per-connector default-allowed permission lists.\n *\n * Each entry is a readonly array of permission names that are allowed by\n * default. Permissions NOT in the array are denied. Connectors without\n * an entry here have no defaults (all permissions allowed).\n *\n * These arrays are generated alongside the firewall configs — see each\n * connector's generator (e.g. slack.ts) for the source of truth.\n */\nconst DEFAULT_ALLOWED: Partial<\n Record<FirewallConnectorType, ReadonlyArray<string>>\n> = {\n slack: slackDefaultAllowed,\n};\n\n/**\n * Get the default firewall policies for a connector type.\n *\n * Builds a full permission → policy map from the connector's default-allowed\n * list: listed permissions get \"allow\", everything else gets \"deny\".\n *\n * Returns null when no defaults are defined (caller treats as unrestricted).\n */\nexport function getDefaultFirewallPolicies(\n type: FirewallConnectorType,\n): Record<string, FirewallPolicyValue> | null {\n const allowed = DEFAULT_ALLOWED[type];\n if (!allowed) return null;\n\n const allowSet = new Set<string>(allowed);\n const config = getConnectorFirewall(type);\n const result: Record<string, FirewallPolicyValue> = {};\n for (const api of config.apis) {\n if (api.permissions) {\n for (const p of api.permissions) {\n result[p.name] = allowSet.has(p.name) ? \"allow\" : \"deny\";\n }\n }\n }\n return result;\n}\n\n/**\n * Merge stored firewall policies with per-connector defaults.\n *\n * For each connector that has a default-allowed list, fills in default\n * policies when no explicit entry exists in the stored policies.\n * Call this when reading `firewallPolicies` from the database so that\n * downstream consumers don't need to know about defaults.\n */\nexport function resolveFirewallPolicies(\n stored: FirewallPolicies | null,\n connectors: string[],\n): FirewallPolicies | null {\n let resolved: FirewallPolicies | null = stored;\n for (const connector of connectors) {\n if (!isFirewallConnectorType(connector)) continue;\n if (resolved?.[connector]) continue;\n const defaults = getDefaultFirewallPolicies(connector);\n if (!defaults) continue;\n resolved = { ...resolved, [connector]: defaults };\n }\n return resolved;\n}\n","import type { FirewallConfig } from \"./firewalls\";\n\n/**\n * Parameter segment pattern: `{name}`, `{name+}`, or `{name*}`.\n */\nconst PARAM_SEG = /^\\{([^}]+)\\}$/;\n\n/**\n * Match a URL path against a rule path pattern.\n *\n * Ported from the Python MITM addon's `match_path()` function\n * (crates/runner/mitm-addon/src/mitm_addon.py).\n *\n * - Literal segments must match exactly (case-sensitive).\n * - `{name}` matches a single non-empty path segment.\n * - `{name+}` matches the rest of the path (one or more segments). Must be last.\n * - `{name*}` matches the rest of the path (zero or more segments). Must be last.\n *\n * Returns extracted parameters on match, or null on mismatch.\n */\nexport function matchFirewallPath(\n path: string,\n pattern: string,\n): Record<string, string> | null {\n const pathSegs = path.split(\"/\").filter(Boolean);\n const patternSegs = pattern.split(\"/\").filter(Boolean);\n\n const params: Record<string, string> = {};\n let pi = 0;\n\n for (const seg of patternSegs) {\n const m = PARAM_SEG.exec(seg);\n if (m) {\n const name = m[1]!;\n if (name.endsWith(\"+\")) {\n // Greedy: consume rest (1+)\n if (pi >= pathSegs.length) return null;\n params[name.slice(0, -1)] = pathSegs.slice(pi).join(\"/\");\n return params;\n }\n if (name.endsWith(\"*\")) {\n // Greedy: consume rest (0+)\n params[name.slice(0, -1)] = pathSegs.slice(pi).join(\"/\");\n return params;\n }\n // Single segment\n if (pi >= pathSegs.length) return null;\n params[name] = pathSegs[pi]!;\n pi++;\n } else {\n // Literal\n if (pi >= pathSegs.length || pathSegs[pi] !== seg) return null;\n pi++;\n }\n }\n\n // All pattern segments consumed; path must also be fully consumed\n if (pi !== pathSegs.length) return null;\n return params;\n}\n\n/**\n * Find all permission names from a firewall config whose rules match\n * the given HTTP method and relative path.\n *\n * Method matching is case-insensitive. The special method `ANY` matches\n * any HTTP method.\n */\nexport function findMatchingPermissions(\n method: string,\n path: string,\n config: FirewallConfig,\n): string[] {\n const upperMethod = method.toUpperCase();\n const matched = new Set<string>();\n\n for (const api of config.apis) {\n if (!api.permissions) continue;\n for (const perm of api.permissions) {\n if (matched.has(perm.name)) continue;\n for (const rule of perm.rules) {\n const spaceIdx = rule.indexOf(\" \");\n if (spaceIdx === -1) continue;\n const ruleMethod = rule.slice(0, spaceIdx).toUpperCase();\n const rulePath = rule.slice(spaceIdx + 1);\n if (ruleMethod !== \"ANY\" && ruleMethod !== upperMethod) continue;\n if (matchFirewallPath(path, rulePath) !== null) {\n matched.add(perm.name);\n break;\n }\n }\n }\n }\n\n return [...matched];\n}\n","import { z } from \"zod\";\nimport { initContract, authHeadersSchema } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\n/**\n * User preferences schemas (shared across contracts)\n */\nexport const sendModeSchema = z.enum([\"enter\", \"cmd-enter\"]);\nexport type SendMode = z.infer<typeof sendModeSchema>;\n\nexport const userPreferencesResponseSchema = z.object({\n timezone: z.string().nullable(),\n pinnedAgentIds: z.array(z.string()),\n sendMode: sendModeSchema,\n});\n\nexport type UserPreferencesResponse = z.infer<\n typeof userPreferencesResponseSchema\n>;\n\nexport const updateUserPreferencesRequestSchema = z\n .object({\n timezone: z.string().min(1).optional(),\n pinnedAgentIds: z.array(z.string()).optional(),\n sendMode: sendModeSchema.optional(),\n })\n .refine(\n (data) => {\n return (\n data.timezone !== undefined ||\n data.pinnedAgentIds !== undefined ||\n data.sendMode !== undefined\n );\n },\n {\n message: \"At least one preference must be provided\",\n },\n );\n\nexport type UpdateUserPreferencesRequest = z.infer<\n typeof updateUserPreferencesRequestSchema\n>;\n\n/**\n * Zero user preferences contract for /api/zero/user-preferences\n *\n * GET: Get current user's preferences\n * POST: Update user preferences\n */\nexport const zeroUserPreferencesContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/user-preferences\",\n headers: authHeadersSchema,\n responses: {\n 200: userPreferencesResponseSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Get user preferences\",\n },\n update: {\n method: \"POST\",\n path: \"/api/zero/user-preferences\",\n headers: authHeadersSchema,\n body: updateUserPreferencesRequestSchema,\n responses: {\n 200: userPreferencesResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Update user preferences\",\n },\n});\n\nexport type ZeroUserPreferencesContract = typeof zeroUserPreferencesContract;\n","import { z } from \"zod\";\n\n/**\n * Org list item schema\n */\nexport const orgListItemSchema = z.object({\n slug: z.string(),\n role: z.string(),\n});\nexport type OrgListItem = z.infer<typeof orgListItemSchema>;\n\n/**\n * Org list response schema\n */\nexport const orgListResponseSchema = z.object({\n orgs: z.array(orgListItemSchema),\n active: z.string().optional(),\n});\nexport type OrgListResponse = z.infer<typeof orgListResponseSchema>;\n","import { z } from \"zod\";\nimport { initContract, authHeadersSchema } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\n/**\n * Onboarding status response schema\n */\nexport const onboardingStatusResponseSchema = z.object({\n needsOnboarding: z.boolean(),\n isAdmin: z.boolean(),\n hasOrg: z.boolean(),\n hasDefaultAgent: z.boolean(),\n defaultAgentId: z.string().nullable(),\n defaultAgentMetadata: z\n .object({\n displayName: z.string().optional(),\n description: z.string().optional(),\n sound: z.string().optional(),\n })\n .nullable(),\n defaultAgentSkills: z.array(z.string()),\n});\n\nexport type OnboardingStatusResponse = z.infer<\n typeof onboardingStatusResponseSchema\n>;\n\n/**\n * Onboarding status contract for GET /api/zero/onboarding/status\n */\nexport const onboardingStatusContract = c.router({\n getStatus: {\n method: \"GET\",\n path: \"/api/zero/onboarding/status\",\n headers: authHeadersSchema,\n responses: {\n 200: onboardingStatusResponseSchema,\n 401: apiErrorSchema,\n },\n summary: \"Get onboarding status for current user\",\n },\n});\n\nexport const onboardingCompleteContract = c.router({\n complete: {\n method: \"POST\",\n path: \"/api/zero/onboarding/complete\",\n headers: authHeadersSchema,\n body: c.noBody(),\n responses: {\n 200: z.object({ ok: z.boolean() }),\n 401: apiErrorSchema,\n },\n summary: \"Mark member onboarding as complete\",\n },\n});\n\nexport type OnboardingStatusContract = typeof onboardingStatusContract;\nexport type OnboardingCompleteContract = typeof onboardingCompleteContract;\n","import { z } from \"zod\";\nimport { initContract, authHeadersSchema } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\nexport const skillFrontmatterSchema = z.object({\n name: z.string().optional(),\n description: z.string().optional(),\n});\n\nconst resolvedSkillSchema = z.object({\n storageName: z.string(),\n versionHash: z.string(),\n frontmatter: skillFrontmatterSchema,\n});\n\nexport const skillsResolveContract = c.router({\n resolve: {\n method: \"POST\",\n path: \"/api/skills/resolve\",\n headers: authHeadersSchema,\n body: z.object({\n skills: z.array(z.url()).min(1).max(100),\n }),\n responses: {\n 200: z.object({\n resolved: z.record(z.string(), resolvedSkillSchema),\n unresolved: z.array(z.string()),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n },\n summary: \"Batch resolve skill URLs to cached version info\",\n },\n});\n\nexport type SkillsResolveContract = typeof skillsResolveContract;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport { firewallPoliciesSchema } from \"./firewalls\";\n\nconst c = initContract();\n\n/**\n * Custom skill name validation regex.\n * Must be lowercase alphanumeric with hyphens, no leading/trailing hyphens.\n * Minimum 2 characters.\n */\nexport const zeroAgentCustomSkillNameSchema = z\n .string()\n .min(2)\n .max(64)\n .regex(/^[a-z0-9][a-z0-9-]*[a-z0-9]$/);\n\n/**\n * Zero agent response schema\n */\nexport const zeroAgentResponseSchema = z.object({\n agentId: z.string(),\n description: z.string().nullable(),\n displayName: z.string().nullable(),\n sound: z.string().nullable(),\n avatarUrl: z.string().nullable(),\n firewallPolicies: firewallPoliciesSchema.nullable(),\n customSkills: z.array(z.string()).default([]),\n});\n\n/**\n * Create/update zero agent request schema\n */\nexport const zeroAgentRequestSchema = z.object({\n description: z.string().optional(),\n displayName: z.string().optional(),\n sound: z.string().optional(),\n avatarUrl: z.string().optional(),\n customSkills: z.array(zeroAgentCustomSkillNameSchema).optional(),\n});\n\n/**\n * Partial metadata update request schema (for PATCH)\n */\nexport const zeroAgentMetadataRequestSchema = z.object({\n displayName: z.string().optional(),\n description: z.string().optional(),\n sound: z.string().optional(),\n avatarUrl: z.string().nullable().optional(),\n});\n\n/**\n * Zero agent instructions response schema\n */\nexport const zeroAgentInstructionsResponseSchema = z.object({\n content: z.string().nullable(),\n filename: z.string().nullable(),\n});\n\n/**\n * Zero agent instructions update request schema\n */\nexport const zeroAgentInstructionsRequestSchema = z.object({\n content: z.string(),\n});\n\n/**\n * Contract for GET/POST /api/zero/agents (list/create agents)\n */\nexport const zeroAgentsMainContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/agents\",\n headers: authHeadersSchema,\n body: zeroAgentRequestSchema,\n responses: {\n 201: zeroAgentResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 422: apiErrorSchema,\n },\n summary: \"Create zero agent\",\n },\n list: {\n method: \"GET\",\n path: \"/api/zero/agents\",\n headers: authHeadersSchema,\n responses: {\n 200: z.array(zeroAgentResponseSchema),\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"List zero agents\",\n },\n});\n\n/**\n * Contract for GET/PUT/PATCH/DELETE /api/zero/agents/:id\n */\nexport const zeroAgentsByIdContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/agents/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string().uuid() }),\n responses: {\n 200: zeroAgentResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get zero agent by id\",\n },\n update: {\n method: \"PUT\",\n path: \"/api/zero/agents/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string().uuid() }),\n body: zeroAgentRequestSchema,\n responses: {\n 200: zeroAgentResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 422: apiErrorSchema,\n },\n summary: \"Update zero agent\",\n },\n updateMetadata: {\n method: \"PATCH\",\n path: \"/api/zero/agents/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string().uuid() }),\n body: zeroAgentMetadataRequestSchema,\n responses: {\n 200: zeroAgentResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Update zero agent metadata\",\n },\n delete: {\n method: \"DELETE\",\n path: \"/api/zero/agents/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string().uuid() }),\n body: c.noBody(),\n responses: {\n 204: c.noBody(),\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Delete zero agent by id\",\n },\n});\n\n/**\n * Update firewall policies request schema\n */\nexport const zeroAgentFirewallPoliciesRequestSchema = z.object({\n agentId: z.string().uuid(),\n policies: firewallPoliciesSchema,\n});\n\n/**\n * Contract for PUT /api/zero/firewall-policies\n */\nexport const zeroAgentFirewallPoliciesContract = c.router({\n update: {\n method: \"PUT\",\n path: \"/api/zero/firewall-policies\",\n headers: authHeadersSchema,\n body: zeroAgentFirewallPoliciesRequestSchema,\n responses: {\n 200: zeroAgentResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Update zero agent firewall policies (admin only)\",\n },\n});\n\n/**\n * Contract for GET/PUT /api/zero/agents/:id/instructions\n */\nexport const zeroAgentInstructionsContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/agents/:id/instructions\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string().uuid() }),\n responses: {\n 200: zeroAgentInstructionsResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get zero agent instructions\",\n },\n update: {\n method: \"PUT\",\n path: \"/api/zero/agents/:id/instructions\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string().uuid() }),\n body: zeroAgentInstructionsRequestSchema,\n responses: {\n 200: zeroAgentResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 422: apiErrorSchema,\n },\n summary: \"Update zero agent instructions\",\n },\n});\n\n/**\n * Custom skill metadata schema\n */\nexport const zeroAgentCustomSkillSchema = z.object({\n name: zeroAgentCustomSkillNameSchema,\n displayName: z.string().max(256).nullable(),\n description: z.string().max(1024).nullable(),\n});\n\n/**\n * Skill content request schema (create/update)\n */\nexport const zeroAgentSkillContentRequestSchema = z.object({\n content: z.string(),\n});\n\n/**\n * Skill content response schema (get with content)\n */\nexport const zeroAgentSkillContentResponseSchema = z.object({\n name: z.string(),\n displayName: z.string().nullable(),\n description: z.string().nullable(),\n content: z.string().nullable(),\n});\n\n/**\n * Skill list response schema\n */\nexport const zeroAgentSkillListResponseSchema = z.array(\n zeroAgentCustomSkillSchema,\n);\n\n/**\n * Contract for GET/POST /api/zero/skills (list + create org-level skills)\n */\nexport const zeroSkillsCollectionContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/skills\",\n headers: authHeadersSchema,\n responses: {\n 200: zeroAgentSkillListResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"List all custom skills in the organization\",\n },\n create: {\n method: \"POST\",\n path: \"/api/zero/skills\",\n headers: authHeadersSchema,\n body: zeroAgentSkillContentRequestSchema.extend({\n name: zeroAgentCustomSkillNameSchema,\n displayName: z.string().max(256).optional(),\n description: z.string().max(1024).optional(),\n }),\n responses: {\n 201: zeroAgentCustomSkillSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Create a custom skill in the organization\",\n },\n});\n\n/**\n * Contract for GET/PUT/DELETE /api/zero/skills/:name (org-level skill detail)\n */\nexport const zeroSkillsDetailContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/skills/:name\",\n headers: authHeadersSchema,\n pathParams: z.object({ name: zeroAgentCustomSkillNameSchema }),\n responses: {\n 200: zeroAgentSkillContentResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get custom skill with content\",\n },\n update: {\n method: \"PUT\",\n path: \"/api/zero/skills/:name\",\n headers: authHeadersSchema,\n pathParams: z.object({ name: zeroAgentCustomSkillNameSchema }),\n body: zeroAgentSkillContentRequestSchema,\n responses: {\n 200: zeroAgentSkillContentResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Update custom skill content\",\n },\n delete: {\n method: \"DELETE\",\n path: \"/api/zero/skills/:name\",\n headers: authHeadersSchema,\n pathParams: z.object({ name: zeroAgentCustomSkillNameSchema }),\n body: c.noBody(),\n responses: {\n 204: c.noBody(),\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Delete custom skill from the organization\",\n },\n});\n\n/**\n * Firewall access request status\n */\nexport const firewallAccessRequestStatusSchema = z.enum([\n \"pending\",\n \"approved\",\n \"rejected\",\n]);\n\n/**\n * Firewall access request response schema\n */\nexport const firewallAccessRequestResponseSchema = z.object({\n id: z.string().uuid(),\n agentId: z.string().uuid(),\n firewallRef: z.string(),\n permission: z.string(),\n method: z.string().nullable(),\n path: z.string().nullable(),\n reason: z.string().nullable(),\n status: firewallAccessRequestStatusSchema,\n requesterUserId: z.string(),\n requesterName: z.string().nullable(),\n resolvedBy: z.string().nullable(),\n resolvedAt: z.string().nullable(),\n createdAt: z.string(),\n});\n\n/**\n * Create firewall access request body\n */\nexport const createFirewallAccessRequestSchema = z.object({\n agentId: z.string().uuid(),\n firewallRef: z.string(),\n permission: z.string(),\n method: z.string().optional(),\n path: z.string().optional(),\n reason: z.string().optional(),\n});\n\n/**\n * Resolve firewall access request body\n */\nexport const resolveFirewallAccessRequestSchema = z.object({\n requestId: z.string().uuid(),\n action: z.enum([\"approve\", \"reject\"]),\n});\n\n/**\n * Contract for POST /api/zero/firewall-access-requests (create)\n */\nexport const firewallAccessRequestsCreateContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/firewall-access-requests\",\n headers: authHeadersSchema,\n body: createFirewallAccessRequestSchema,\n responses: {\n 201: firewallAccessRequestResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Create firewall access request\",\n },\n});\n\n/**\n * Contract for GET /api/zero/firewall-access-requests (list)\n */\nconst firewallAccessRequestsListQuerySchema = z.object({\n agentId: z.string(),\n status: z.string().optional(),\n});\n\nexport const firewallAccessRequestsListContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/firewall-access-requests\",\n headers: authHeadersSchema,\n query: firewallAccessRequestsListQuerySchema,\n responses: {\n 200: z.array(firewallAccessRequestResponseSchema),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"List firewall access requests for an agent\",\n },\n});\n\n/**\n * Contract for PUT /api/zero/firewall-access-requests (resolve)\n */\nexport const firewallAccessRequestsResolveContract = c.router({\n resolve: {\n method: \"PUT\",\n path: \"/api/zero/firewall-access-requests\",\n headers: authHeadersSchema,\n body: resolveFirewallAccessRequestSchema,\n responses: {\n 200: firewallAccessRequestResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Resolve (approve/reject) a firewall access request (admin only)\",\n },\n});\n\n// Export types\nexport type ZeroAgentResponse = z.infer<typeof zeroAgentResponseSchema>;\nexport type ZeroAgentRequest = z.infer<typeof zeroAgentRequestSchema>;\nexport type ZeroAgentMetadataRequest = z.infer<\n typeof zeroAgentMetadataRequestSchema\n>;\nexport type ZeroAgentInstructionsResponse = z.infer<\n typeof zeroAgentInstructionsResponseSchema\n>;\nexport type ZeroAgentInstructionsRequest = z.infer<\n typeof zeroAgentInstructionsRequestSchema\n>;\nexport type ZeroAgentFirewallPoliciesRequest = z.infer<\n typeof zeroAgentFirewallPoliciesRequestSchema\n>;\n\nexport type ZeroAgentsMainContract = typeof zeroAgentsMainContract;\nexport type ZeroAgentsByIdContract = typeof zeroAgentsByIdContract;\nexport type ZeroAgentInstructionsContract =\n typeof zeroAgentInstructionsContract;\nexport type ZeroAgentFirewallPoliciesContract =\n typeof zeroAgentFirewallPoliciesContract;\nexport type ZeroAgentCustomSkill = z.infer<typeof zeroAgentCustomSkillSchema>;\nexport type ZeroAgentSkillContentRequest = z.infer<\n typeof zeroAgentSkillContentRequestSchema\n>;\nexport type ZeroAgentSkillContentResponse = z.infer<\n typeof zeroAgentSkillContentResponseSchema\n>;\nexport type ZeroSkillsCollectionContract = typeof zeroSkillsCollectionContract;\nexport type ZeroSkillsDetailContract = typeof zeroSkillsDetailContract;\nexport type FirewallAccessRequestResponse = z.infer<\n typeof firewallAccessRequestResponseSchema\n>;\nexport type CreateFirewallAccessRequest = z.infer<\n typeof createFirewallAccessRequestSchema\n>;\nexport type ResolveFirewallAccessRequest = z.infer<\n typeof resolveFirewallAccessRequestSchema\n>;\nexport type FirewallAccessRequestsCreateContract =\n typeof firewallAccessRequestsCreateContract;\nexport type FirewallAccessRequestsListContract =\n typeof firewallAccessRequestsListContract;\nexport type FirewallAccessRequestsResolveContract =\n typeof firewallAccessRequestsResolveContract;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\n/**\n * User connector enabled types schema\n * Sparse model: only connector types explicitly enabled by the user for this agent.\n */\nexport const userConnectorEnabledTypesSchema = z.object({\n enabledTypes: z.array(z.string()),\n});\nexport type UserConnectorEnabledTypes = z.infer<\n typeof userConnectorEnabledTypesSchema\n>;\n\n/**\n * Contract for GET/PUT /api/zero/agents/:id/user-connectors\n */\nexport const zeroUserConnectorsContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/agents/:id/user-connectors\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string().uuid() }),\n responses: {\n 200: userConnectorEnabledTypesSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get enabled connector types for user on agent\",\n },\n update: {\n method: \"PUT\",\n path: \"/api/zero/agents/:id/user-connectors\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string().uuid() }),\n body: userConnectorEnabledTypesSchema,\n responses: {\n 200: userConnectorEnabledTypesSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Replace enabled connector types for user on agent\",\n },\n});\nexport type ZeroUserConnectorsContract = typeof zeroUserConnectorsContract;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport {\n computerConnectorCreateResponseSchema,\n connectorListResponseSchema,\n connectorResponseSchema,\n connectorSessionResponseSchema,\n connectorSessionStatusResponseSchema,\n connectorTypeSchema,\n scopeDiffResponseSchema,\n} from \"./connectors\";\n\nconst c = initContract();\n\n/**\n * Zero contract for GET /api/zero/connectors\n * Proxies to GET /api/connectors\n */\nexport const zeroConnectorsMainContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/connectors\",\n headers: authHeadersSchema,\n responses: {\n 200: connectorListResponseSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"List all connectors (zero proxy)\",\n },\n});\n\n/**\n * Zero contract for GET/DELETE /api/zero/connectors/:type\n * Proxies to GET/DELETE /api/connectors/:type\n */\nexport const zeroConnectorsByTypeContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/connectors/:type\",\n headers: authHeadersSchema,\n pathParams: z.object({ type: connectorTypeSchema }),\n responses: {\n 200: connectorResponseSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get connector by type (zero proxy)\",\n },\n delete: {\n method: \"DELETE\",\n path: \"/api/zero/connectors/:type\",\n headers: authHeadersSchema,\n pathParams: z.object({ type: connectorTypeSchema }),\n responses: {\n 204: c.noBody(),\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Disconnect a connector (zero proxy)\",\n },\n});\n\n/**\n * Zero contract for GET /api/zero/connectors/:type/scope-diff\n * App-layer endpoint (direct service call, no proxy)\n */\nexport const zeroConnectorScopeDiffContract = c.router({\n getScopeDiff: {\n method: \"GET\",\n path: \"/api/zero/connectors/:type/scope-diff\",\n headers: authHeadersSchema,\n pathParams: z.object({ type: connectorTypeSchema }),\n responses: {\n 200: scopeDiffResponseSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get scope diff for a connector\",\n },\n});\n\nconst connectorSearchAuthMethodSchema = z.enum([\"oauth\", \"api-token\"]);\n\nexport type ConnectorSearchAuthMethod = z.infer<\n typeof connectorSearchAuthMethodSchema\n>;\n\nconst connectorSearchItemSchema = z.object({\n id: z.string(),\n label: z.string(),\n description: z.string(),\n authMethods: z.array(connectorSearchAuthMethodSchema),\n});\n\nconst connectorSearchResponseSchema = z.object({\n connectors: z.array(connectorSearchItemSchema),\n});\n\n/**\n * Zero contract for GET /api/zero/connectors/search\n * Returns all available connector type definitions with optional keyword search\n */\nexport const zeroConnectorsSearchContract = c.router({\n search: {\n method: \"GET\",\n path: \"/api/zero/connectors/search\",\n headers: authHeadersSchema,\n query: z.object({ keyword: z.string().optional() }),\n responses: {\n 200: connectorSearchResponseSchema,\n 401: apiErrorSchema,\n },\n summary: \"Search available connector types\",\n },\n});\n\n/**\n * Zero contract for POST /api/zero/connectors/:type/sessions\n * Proxies to POST /api/connectors/:type/sessions (OAuth device flow)\n */\nexport const zeroConnectorSessionsContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/connectors/:type/sessions\",\n headers: authHeadersSchema,\n pathParams: z.object({ type: connectorTypeSchema }),\n body: z.object({}).optional(),\n responses: {\n 200: connectorSessionResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n },\n summary: \"Create connector session for device flow (zero proxy)\",\n },\n});\n\n/**\n * Zero contract for GET /api/zero/connectors/:type/sessions/:sessionId\n * Proxies to GET /api/connectors/:type/sessions/:sessionId (poll session)\n */\nexport const zeroConnectorSessionByIdContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/connectors/:type/sessions/:sessionId\",\n headers: authHeadersSchema,\n pathParams: z.object({\n type: connectorTypeSchema,\n sessionId: z.uuid(),\n }),\n responses: {\n 200: connectorSessionStatusResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get connector session status (zero proxy)\",\n },\n});\n\n/**\n * Zero contract for POST/GET/DELETE /api/zero/connectors/computer\n * Proxies to /api/connectors/computer (computer connector CRUD)\n */\nexport const zeroComputerConnectorContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/connectors/computer\",\n headers: authHeadersSchema,\n body: z.object({}).optional(),\n responses: {\n 200: computerConnectorCreateResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Create computer connector (zero proxy)\",\n },\n get: {\n method: \"GET\",\n path: \"/api/zero/connectors/computer\",\n headers: authHeadersSchema,\n responses: {\n 200: connectorResponseSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get computer connector status (zero proxy)\",\n },\n delete: {\n method: \"DELETE\",\n path: \"/api/zero/connectors/computer\",\n headers: authHeadersSchema,\n responses: {\n 204: c.noBody(),\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Delete computer connector (zero proxy)\",\n },\n});\n\nexport type ZeroConnectorsMainContract = typeof zeroConnectorsMainContract;\nexport type ZeroConnectorsByTypeContract = typeof zeroConnectorsByTypeContract;\nexport type ZeroConnectorScopeDiffContract =\n typeof zeroConnectorScopeDiffContract;\nexport type ZeroConnectorsSearchContract = typeof zeroConnectorsSearchContract;\nexport type ZeroConnectorSessionsContract =\n typeof zeroConnectorSessionsContract;\nexport type ZeroConnectorSessionByIdContract =\n typeof zeroConnectorSessionByIdContract;\nexport type ZeroComputerConnectorContract =\n typeof zeroComputerConnectorContract;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport { orgResponseSchema, updateOrgRequestSchema } from \"./orgs\";\nimport { orgMessageResponseSchema } from \"./org-members\";\n\nconst c = initContract();\n\n/**\n * Zero contract for /api/zero/org\n * Proxies to /api/org\n */\nexport const zeroOrgContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/org\",\n headers: authHeadersSchema,\n responses: {\n 200: orgResponseSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get current org (zero proxy)\",\n },\n update: {\n method: \"PUT\",\n path: \"/api/zero/org\",\n headers: authHeadersSchema,\n body: updateOrgRequestSchema,\n responses: {\n 200: orgResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Update org slug (zero proxy)\",\n },\n});\n\nexport type ZeroOrgContract = typeof zeroOrgContract;\n\n/**\n * Zero contract for POST /api/zero/org/leave\n * Proxies to POST /api/org/leave\n */\nexport const zeroOrgLeaveContract = c.router({\n leave: {\n method: \"POST\",\n path: \"/api/zero/org/leave\",\n headers: authHeadersSchema,\n body: z.object({}),\n responses: {\n 200: orgMessageResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Leave the current org (zero proxy)\",\n },\n});\n\nexport type ZeroOrgLeaveContract = typeof zeroOrgLeaveContract;\n\n/**\n * Zero contract for DELETE /api/zero/org/delete\n */\nexport const zeroOrgDeleteContract = c.router({\n delete: {\n method: \"POST\",\n path: \"/api/zero/org/delete\",\n headers: authHeadersSchema,\n body: z.object({ slug: z.string() }),\n responses: {\n 200: orgMessageResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Delete the current org (zero proxy)\",\n },\n});\n\nexport type ZeroOrgDeleteContract = typeof zeroOrgDeleteContract;\n","import { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport { orgListResponseSchema } from \"./org-list\";\n\nconst c = initContract();\n\n/**\n * Zero contract for GET /api/zero/org/list\n * Lists all accessible orgs for the authenticated user.\n */\nexport const zeroOrgListContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/org/list\",\n headers: authHeadersSchema,\n responses: {\n 200: orgListResponseSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"List all accessible orgs for the authenticated user\",\n },\n});\n\nexport type ZeroOrgListContract = typeof zeroOrgListContract;\n","import { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport {\n orgMembersResponseSchema,\n inviteOrgMemberRequestSchema,\n removeOrgMemberRequestSchema,\n updateOrgMemberRoleRequestSchema,\n revokeInvitationRequestSchema,\n membershipRequestActionSchema,\n orgMessageResponseSchema,\n} from \"./org-members\";\n\nconst c = initContract();\n\n/**\n * Zero contract for /api/zero/org/members\n * Proxies to /api/org/members\n */\nexport const zeroOrgMembersContract = c.router({\n members: {\n method: \"GET\",\n path: \"/api/zero/org/members\",\n headers: authHeadersSchema,\n responses: {\n 200: orgMembersResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Get org members (zero proxy)\",\n },\n updateRole: {\n method: \"PATCH\",\n path: \"/api/zero/org/members\",\n headers: authHeadersSchema,\n body: updateOrgMemberRoleRequestSchema,\n responses: {\n 200: orgMessageResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Update a member's role (zero proxy)\",\n },\n removeMember: {\n method: \"DELETE\",\n path: \"/api/zero/org/members\",\n headers: authHeadersSchema,\n body: removeOrgMemberRequestSchema,\n responses: {\n 200: orgMessageResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Remove a member from the org (zero proxy)\",\n },\n});\n\nexport type ZeroOrgMembersContract = typeof zeroOrgMembersContract;\n\n/**\n * Zero contract for POST /api/zero/org/invite\n * Proxies to POST /api/org/invite\n */\nexport const zeroOrgInviteContract = c.router({\n invite: {\n method: \"POST\",\n path: \"/api/zero/org/invite\",\n headers: authHeadersSchema,\n body: inviteOrgMemberRequestSchema,\n responses: {\n 200: orgMessageResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Invite a member to the org (zero proxy)\",\n },\n revoke: {\n method: \"DELETE\",\n path: \"/api/zero/org/invite\",\n headers: authHeadersSchema,\n body: revokeInvitationRequestSchema,\n responses: {\n 200: orgMessageResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Revoke a pending invitation (zero proxy)\",\n },\n});\n\nexport type ZeroOrgInviteContract = typeof zeroOrgInviteContract;\n\n/**\n * Zero contract for /api/zero/org/membership-requests\n */\nexport const zeroOrgMembershipRequestsContract = c.router({\n accept: {\n method: \"POST\",\n path: \"/api/zero/org/membership-requests\",\n headers: authHeadersSchema,\n body: membershipRequestActionSchema,\n responses: {\n 200: orgMessageResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Accept a membership request (zero proxy)\",\n },\n reject: {\n method: \"DELETE\",\n path: \"/api/zero/org/membership-requests\",\n headers: authHeadersSchema,\n body: membershipRequestActionSchema,\n responses: {\n 200: orgMessageResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Reject a membership request (zero proxy)\",\n },\n});\n\nexport type ZeroOrgMembershipRequestsContract =\n typeof zeroOrgMembershipRequestsContract;\n","import { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport {\n orgDomainsResponseSchema,\n addDomainRequestSchema,\n domainActionRequestSchema,\n domainVerifyRequestSchema,\n orgMessageResponseSchema,\n} from \"./org-members\";\n\nconst c = initContract();\n\n/**\n * Zero contract for /api/zero/org/domains\n */\nexport const zeroOrgDomainsContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/org/domains\",\n headers: authHeadersSchema,\n responses: {\n 200: orgDomainsResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"List org domains (zero proxy)\",\n },\n add: {\n method: \"POST\",\n path: \"/api/zero/org/domains\",\n headers: authHeadersSchema,\n body: addDomainRequestSchema,\n responses: {\n 200: orgMessageResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Add a domain to the org (zero proxy)\",\n },\n remove: {\n method: \"DELETE\",\n path: \"/api/zero/org/domains\",\n headers: authHeadersSchema,\n body: domainActionRequestSchema,\n responses: {\n 200: orgMessageResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Remove a domain from the org (zero proxy)\",\n },\n setVerified: {\n method: \"PATCH\",\n path: \"/api/zero/org/domains\",\n headers: authHeadersSchema,\n body: domainVerifyRequestSchema,\n responses: {\n 200: orgMessageResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Verify or unverify a domain (zero proxy)\",\n },\n});\n\nexport type ZeroOrgDomainsContract = typeof zeroOrgDomainsContract;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport { composeResponseSchema, composeListItemSchema } from \"./composes\";\n\nconst c = initContract();\n\n/**\n * Zero composes main contract (GET /api/zero/composes)\n * Proxies to composesMainContract.getByName\n */\nexport const zeroComposesMainContract = c.router({\n getByName: {\n method: \"GET\",\n path: \"/api/zero/composes\",\n headers: authHeadersSchema,\n query: z.object({\n name: z.string().min(1, \"Missing name query parameter\"),\n }),\n responses: {\n 200: composeResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"Get agent compose by name (zero proxy)\",\n },\n});\n\n/**\n * Zero composes by ID contract (GET/DELETE /api/zero/composes/:id)\n * Proxies to composesByIdContract\n */\nexport const zeroComposesByIdContract = c.router({\n getById: {\n method: \"GET\",\n path: \"/api/zero/composes/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Compose ID is required\"),\n }),\n responses: {\n 200: composeResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get agent compose by ID (zero proxy)\",\n },\n delete: {\n method: \"DELETE\",\n path: \"/api/zero/composes/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().uuid(\"Compose ID is required\"),\n }),\n body: c.noBody(),\n responses: {\n 204: c.noBody(),\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Delete agent compose (zero proxy)\",\n },\n});\n\n/**\n * Zero composes list contract (GET /api/zero/composes/list)\n * Proxies to composesListContract\n */\nexport const zeroComposesListContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/composes/list\",\n headers: authHeadersSchema,\n query: z.object({}),\n responses: {\n 200: z.object({\n composes: z.array(composeListItemSchema),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"List all agent composes (zero proxy)\",\n },\n});\n\n// Type exports\nexport type ZeroComposesMainContract = typeof zeroComposesMainContract;\nexport type ZeroComposesByIdContract = typeof zeroComposesByIdContract;\nexport type ZeroComposesListContract = typeof zeroComposesListContract;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport {\n createRunResponseSchema,\n getRunResponseSchema,\n cancelRunResponseSchema,\n agentEventsResponseSchema,\n queueResponseSchema,\n unifiedRunRequestSchema,\n} from \"./runs\";\n\n/**\n * Zero run request schema — subset of unified schema.\n * Server-side defaults are injected by createZeroRun():\n * memoryName, artifactName, disallowedTools.\n * Fields not used by zero triggers are omitted:\n * triggerSource, artifactVersion, vars, secrets, volumeVersions.\n */\nconst zeroRunRequestSchema = unifiedRunRequestSchema\n .omit({\n triggerSource: true,\n memoryName: true,\n artifactName: true,\n artifactVersion: true,\n disallowedTools: true,\n volumeVersions: true,\n vars: true,\n secrets: true,\n agentComposeId: true,\n })\n .extend({\n agentId: z.string().optional(),\n });\n\nconst c = initContract();\n\n/**\n * Zero runs main contract (POST /api/zero/runs)\n * Proxies to runsMainContract.create\n */\nexport const zeroRunsMainContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/runs\",\n headers: authHeadersSchema,\n body: zeroRunRequestSchema,\n responses: {\n 201: createRunResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Create and execute agent run (zero proxy)\",\n },\n});\n\n/**\n * Zero runs by ID contract (GET /api/zero/runs/:id)\n * Proxies to runsByIdContract\n */\nexport const zeroRunsByIdContract = c.router({\n getById: {\n method: \"GET\",\n path: \"/api/zero/runs/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Run ID is required\"),\n }),\n responses: {\n 200: getRunResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get agent run by ID (zero proxy)\",\n },\n});\n\n/**\n * Zero runs cancel contract (POST /api/zero/runs/:id/cancel)\n * Proxies to runsCancelContract\n */\nexport const zeroRunsCancelContract = c.router({\n cancel: {\n method: \"POST\",\n path: \"/api/zero/runs/:id/cancel\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Run ID is required\"),\n }),\n body: z.undefined(),\n responses: {\n 200: cancelRunResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Cancel a pending or running run (zero proxy)\",\n },\n});\n\n/**\n * Zero runs queue contract (GET /api/zero/runs/queue)\n * Proxies to runsQueueContract\n */\nexport const zeroRunsQueueContract = c.router({\n getQueue: {\n method: \"GET\",\n path: \"/api/zero/runs/queue\",\n headers: authHeadersSchema,\n responses: {\n 200: queueResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"Get org run queue status (zero proxy)\",\n },\n});\n\n/**\n * Zero run agent events contract (GET /api/zero/runs/:id/telemetry/agent)\n * Proxies to runAgentEventsContract\n */\nexport const zeroRunAgentEventsContract = c.router({\n getAgentEvents: {\n method: \"GET\",\n path: \"/api/zero/runs/:id/telemetry/agent\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Run ID is required\"),\n }),\n query: z.object({\n since: z.coerce.number().optional(),\n limit: z.coerce.number().min(1).max(100).default(5),\n order: z.enum([\"asc\", \"desc\"]).default(\"desc\"),\n }),\n responses: {\n 200: agentEventsResponseSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get agent events with pagination (zero proxy)\",\n },\n});\n\n/**\n * Run context snapshot — sanitized execution context for debugging.\n * Dynamic fields (environment, firewalls, volumes, artifact) are stored in Axiom.\n * Static fields (prompt, vars, secretNames) are merged from agent_runs at query time.\n */\nconst runContextVolumeSchema = z.object({\n name: z.string(),\n mountPath: z.string(),\n vasStorageName: z.string(),\n vasVersionId: z.string(),\n});\n\nconst runContextArtifactSchema = z.object({\n mountPath: z.string(),\n vasStorageName: z.string(),\n vasVersionId: z.string(),\n});\n\nconst runContextFirewallSchema = z.object({\n name: z.string(),\n ref: z.string(),\n apis: z.array(\n z.object({\n base: z.string(),\n permissions: z\n .array(\n z.object({\n name: z.string(),\n description: z.string().optional(),\n rules: z.array(z.string()),\n }),\n )\n .optional(),\n }),\n ),\n});\n\nconst runContextResponseSchema = z.object({\n prompt: z.string(),\n appendSystemPrompt: z.string().nullable(),\n secretNames: z.array(z.string()),\n vars: z.record(z.string(), z.string()).nullable(),\n environment: z.record(z.string(), z.string()),\n firewalls: z.array(runContextFirewallSchema),\n volumes: z.array(runContextVolumeSchema),\n artifact: runContextArtifactSchema.nullable(),\n memory: runContextArtifactSchema.nullable(),\n});\n\n/**\n * Zero run context contract (GET /api/zero/runs/:id/context)\n * Returns sanitized execution context snapshot for debugging\n */\nexport const zeroRunContextContract = c.router({\n getContext: {\n method: \"GET\",\n path: \"/api/zero/runs/:id/context\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Run ID is required\"),\n }),\n responses: {\n 200: runContextResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get run execution context snapshot for debugging\",\n },\n});\n\n// Inferred types from Zod schemas\nexport type RunContextResponse = z.infer<typeof runContextResponseSchema>;\n\n// Type exports\nexport type ZeroRunsMainContract = typeof zeroRunsMainContract;\nexport type ZeroRunsByIdContract = typeof zeroRunsByIdContract;\nexport type ZeroRunsCancelContract = typeof zeroRunsCancelContract;\nexport type ZeroRunsQueueContract = typeof zeroRunsQueueContract;\nexport type ZeroRunAgentEventsContract = typeof zeroRunAgentEventsContract;\nexport type ZeroRunContextContract = typeof zeroRunContextContract;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\n/**\n * Schedule response schema — shared by all schedule endpoints\n */\nexport const scheduleResponseSchema = z.object({\n id: z.string().uuid(),\n agentId: z.string().uuid(),\n displayName: z.string().nullable(),\n orgSlug: z.string(),\n userId: z.string(),\n name: z.string(),\n triggerType: z.enum([\"cron\", \"once\", \"loop\"]),\n cronExpression: z.string().nullable(),\n atTime: z.string().nullable(),\n intervalSeconds: z.number().nullable(),\n timezone: z.string(),\n prompt: z.string(),\n description: z.string().nullable(),\n appendSystemPrompt: z.string().nullable(),\n vars: z.record(z.string(), z.string()).nullable(),\n secretNames: z.array(z.string()).nullable(),\n volumeVersions: z.record(z.string(), z.string()).nullable(),\n enabled: z.boolean(),\n notifyEmail: z.boolean(),\n notifySlack: z.boolean(),\n notifySlackChannelId: z.string().nullable(),\n nextRunAt: z.string().nullable(),\n lastRunAt: z.string().nullable(),\n retryStartedAt: z.string().nullable(),\n consecutiveFailures: z.number(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport const scheduleListResponseSchema = z.object({\n schedules: z.array(scheduleResponseSchema),\n});\n\nexport const deployScheduleResponseSchema = z.object({\n schedule: scheduleResponseSchema,\n created: z.boolean(),\n});\n\n/**\n * Zero deploy schedule request — requires agentId (compose UUID).\n */\nconst zeroDeployScheduleRequestSchema = z\n .object({\n name: z.string().min(1).max(64, \"Schedule name max 64 chars\"),\n cronExpression: z.string().optional(),\n atTime: z.string().optional(),\n intervalSeconds: z.number().int().min(0).optional(),\n timezone: z.string().default(\"UTC\"),\n prompt: z.string().min(1, \"Prompt required\"),\n description: z.string().optional(),\n appendSystemPrompt: z.string().optional(),\n volumeVersions: z.record(z.string(), z.string()).optional(),\n agentId: z.string().uuid(\"Invalid agent ID\"),\n enabled: z.boolean().optional(),\n notifyEmail: z.boolean().optional(),\n notifySlack: z.boolean().optional(),\n notifySlackChannelId: z.string().nullable().optional(),\n })\n .refine(\n (data) => {\n const triggers = [\n data.cronExpression,\n data.atTime,\n data.intervalSeconds,\n ].filter((v) => {\n return v !== undefined;\n });\n return triggers.length === 1;\n },\n {\n message:\n \"Exactly one of 'cronExpression', 'atTime', or 'intervalSeconds' must be specified\",\n },\n );\n\n/**\n * Zero schedules main contract (GET/POST /api/zero/schedules)\n */\nexport const zeroSchedulesMainContract = c.router({\n deploy: {\n method: \"POST\",\n path: \"/api/zero/schedules\",\n headers: authHeadersSchema,\n body: zeroDeployScheduleRequestSchema,\n responses: {\n 200: deployScheduleResponseSchema,\n 201: deployScheduleResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Deploy schedule (zero proxy)\",\n },\n list: {\n method: \"GET\",\n path: \"/api/zero/schedules\",\n headers: authHeadersSchema,\n responses: {\n 200: scheduleListResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"List all schedules (zero proxy)\",\n },\n});\n\n/**\n * Zero schedules by name contract (DELETE /api/zero/schedules/:name)\n */\nexport const zeroSchedulesByNameContract = c.router({\n delete: {\n method: \"DELETE\",\n path: \"/api/zero/schedules/:name\",\n headers: authHeadersSchema,\n pathParams: z.object({\n name: z.string().min(1, \"Schedule name required\"),\n }),\n query: z.object({\n agentId: z.string().uuid(\"Invalid agent ID\"),\n }),\n responses: {\n 204: c.noBody(),\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Delete schedule (zero proxy)\",\n },\n});\n\n/**\n * Zero schedules enable/disable contract\n */\nexport const zeroSchedulesEnableContract = c.router({\n enable: {\n method: \"POST\",\n path: \"/api/zero/schedules/:name/enable\",\n headers: authHeadersSchema,\n pathParams: z.object({\n name: z.string().min(1, \"Schedule name required\"),\n }),\n body: z.object({\n agentId: z.string().uuid(\"Invalid agent ID\"),\n }),\n responses: {\n 200: scheduleResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Enable schedule (zero proxy)\",\n },\n disable: {\n method: \"POST\",\n path: \"/api/zero/schedules/:name/disable\",\n headers: authHeadersSchema,\n pathParams: z.object({\n name: z.string().min(1, \"Schedule name required\"),\n }),\n body: z.object({\n agentId: z.string().uuid(\"Invalid agent ID\"),\n }),\n responses: {\n 200: scheduleResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Disable schedule (zero proxy)\",\n },\n});\n\n/**\n * Zero schedule run-now contract (POST /api/zero/schedules/run)\n */\nexport const zeroScheduleRunContract = c.router({\n run: {\n method: \"POST\",\n path: \"/api/zero/schedules/run\",\n headers: authHeadersSchema,\n body: z.object({\n scheduleId: z.string().uuid(\"Invalid schedule ID\"),\n }),\n responses: {\n 201: z.object({ runId: z.string() }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Execute a schedule immediately (run now)\",\n },\n});\n\n// Contract type exports\nexport type ZeroSchedulesMainContract = typeof zeroSchedulesMainContract;\nexport type ZeroSchedulesByNameContract = typeof zeroSchedulesByNameContract;\nexport type ZeroSchedulesEnableContract = typeof zeroSchedulesEnableContract;\nexport type ZeroScheduleRunContract = typeof zeroScheduleRunContract;\n\n// Inferred types from response schemas\nexport type ScheduleResponse = z.infer<typeof scheduleResponseSchema>;\nexport type ScheduleListResponse = z.infer<typeof scheduleListResponseSchema>;\nexport type DeployScheduleResponse = z.infer<\n typeof deployScheduleResponseSchema\n>;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport {\n modelProviderListResponseSchema,\n upsertModelProviderRequestSchema,\n upsertModelProviderResponseSchema,\n modelProviderResponseSchema,\n modelProviderTypeSchema,\n updateModelRequestSchema,\n} from \"./model-providers\";\n\nconst c = initContract();\n\n/**\n * Zero model providers main contract for /api/zero/model-providers\n *\n * GET: List org-level model providers (any member)\n * POST: Create or update an org-level model provider (admin only)\n */\nexport const zeroModelProvidersMainContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/model-providers\",\n headers: authHeadersSchema,\n responses: {\n 200: modelProviderListResponseSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"List org-level model providers\",\n },\n upsert: {\n method: \"POST\",\n path: \"/api/zero/model-providers\",\n headers: authHeadersSchema,\n body: upsertModelProviderRequestSchema,\n responses: {\n 200: upsertModelProviderResponseSchema,\n 201: upsertModelProviderResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Create or update an org-level model provider (admin only)\",\n },\n});\n\nexport type ZeroModelProvidersMainContract =\n typeof zeroModelProvidersMainContract;\n\n/**\n * Zero model providers by type contract for /api/zero/model-providers/:type\n *\n * DELETE: Delete an org-level model provider (admin only)\n */\nexport const zeroModelProvidersByTypeContract = c.router({\n delete: {\n method: \"DELETE\",\n path: \"/api/zero/model-providers/:type\",\n headers: authHeadersSchema,\n pathParams: z.object({\n type: modelProviderTypeSchema,\n }),\n responses: {\n 204: c.noBody(),\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Delete an org-level model provider (admin only)\",\n },\n});\n\nexport type ZeroModelProvidersByTypeContract =\n typeof zeroModelProvidersByTypeContract;\n\n/**\n * Zero model providers default contract for /api/zero/model-providers/:type/default\n *\n * POST: Set org-level model provider as default (admin only)\n */\nexport const zeroModelProvidersDefaultContract = c.router({\n setDefault: {\n method: \"POST\",\n path: \"/api/zero/model-providers/:type/default\",\n headers: authHeadersSchema,\n pathParams: z.object({\n type: modelProviderTypeSchema,\n }),\n body: z.undefined(),\n responses: {\n 200: modelProviderResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Set org-level model provider as default (admin only)\",\n },\n});\n\nexport type ZeroModelProvidersDefaultContract =\n typeof zeroModelProvidersDefaultContract;\n\n/**\n * Zero model providers update model contract for /api/zero/model-providers/:type/model\n *\n * PATCH: Update model selection for org-level provider (admin only)\n */\nexport const zeroModelProvidersUpdateModelContract = c.router({\n updateModel: {\n method: \"PATCH\",\n path: \"/api/zero/model-providers/:type/model\",\n headers: authHeadersSchema,\n pathParams: z.object({\n type: modelProviderTypeSchema,\n }),\n body: updateModelRequestSchema,\n responses: {\n 200: modelProviderResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Update model selection for org-level provider (admin only)\",\n },\n});\n\nexport type ZeroModelProvidersUpdateModelContract =\n typeof zeroModelProvidersUpdateModelContract;\n","import { z } from \"zod\";\nimport { initContract, authHeadersSchema } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport {\n secretResponseSchema,\n secretListResponseSchema,\n secretNameSchema,\n setSecretRequestSchema,\n} from \"./secrets\";\nimport {\n variableResponseSchema,\n variableListResponseSchema,\n variableNameSchema,\n setVariableRequestSchema,\n} from \"./variables\";\n\nconst c = initContract();\n\n/**\n * Zero secrets contract for /api/zero/secrets\n *\n * GET: List all secrets (metadata only)\n * POST: Create or update a secret (platform → infra proxy)\n */\nexport const zeroSecretsContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/secrets\",\n headers: authHeadersSchema,\n responses: {\n 200: secretListResponseSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"List all secrets (metadata only)\",\n },\n set: {\n method: \"POST\",\n path: \"/api/zero/secrets\",\n headers: authHeadersSchema,\n body: setSecretRequestSchema,\n responses: {\n 200: secretResponseSchema,\n 201: secretResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Create or update a secret\",\n },\n});\n\nexport type ZeroSecretsContract = typeof zeroSecretsContract;\n\n/**\n * Zero secrets by name contract for /api/zero/secrets/[name]\n *\n * DELETE: Delete a secret by name\n */\nexport const zeroSecretsByNameContract = c.router({\n delete: {\n method: \"DELETE\",\n path: \"/api/zero/secrets/:name\",\n headers: authHeadersSchema,\n pathParams: z.object({\n name: secretNameSchema,\n }),\n responses: {\n 204: c.noBody(),\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Delete a secret by name\",\n },\n});\n\nexport type ZeroSecretsByNameContract = typeof zeroSecretsByNameContract;\n\n/**\n * Zero variables contract for /api/zero/variables\n *\n * GET: List all variables (includes values)\n * POST: Create or update a variable (platform → infra proxy)\n */\nexport const zeroVariablesContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/variables\",\n headers: authHeadersSchema,\n responses: {\n 200: variableListResponseSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"List all variables (includes values)\",\n },\n set: {\n method: \"POST\",\n path: \"/api/zero/variables\",\n headers: authHeadersSchema,\n body: setVariableRequestSchema,\n responses: {\n 200: variableResponseSchema,\n 201: variableResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Create or update a variable\",\n },\n});\n\nexport type ZeroVariablesContract = typeof zeroVariablesContract;\n\n/**\n * Zero variables by name contract for /api/zero/variables/[name]\n *\n * DELETE: Delete a variable by name\n */\nexport const zeroVariablesByNameContract = c.router({\n delete: {\n method: \"DELETE\",\n path: \"/api/zero/variables/:name\",\n headers: authHeadersSchema,\n pathParams: z.object({\n name: variableNameSchema,\n }),\n responses: {\n 204: c.noBody(),\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Delete a variable by name\",\n },\n});\n\nexport type ZeroVariablesByNameContract = typeof zeroVariablesByNameContract;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\nimport { storedChatMessageSchema } from \"./sessions\";\n\nconst c = initContract();\n\n/**\n * Zero session response schema — uses `agentId` instead of `agentComposeId`.\n */\nconst zeroSessionResponseSchema = z.object({\n id: z.string(),\n agentId: z.string(),\n conversationId: z.string().nullable(),\n artifactName: z.string().nullable(),\n secretNames: z.array(z.string()).nullable(),\n chatMessages: z.array(storedChatMessageSchema).optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\n/**\n * Zero sessions proxy contract.\n * GET /api/zero/sessions/:id → forwards to GET /api/agent/sessions/:id\n */\nexport const zeroSessionsByIdContract = c.router({\n getById: {\n method: \"GET\",\n path: \"/api/zero/sessions/:id\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Session ID is required\"),\n }),\n responses: {\n 200: zeroSessionResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get session by ID (zero proxy)\",\n },\n});\n\nexport type ZeroSessionsByIdContract = typeof zeroSessionsByIdContract;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\n/**\n * Integration Slack message contract\n * POST /api/zero/integrations/slack/message\n *\n * Sends a Slack message via the org's installed bot token.\n * Requires `slack:write` capability (via ZERO_TOKEN).\n */\nconst sendSlackMessageBodySchema = z.object({\n channel: z.string().min(1, \"Channel ID is required\"),\n text: z.string().optional(),\n threadTs: z.string().optional(),\n blocks: z.array(z.object({ type: z.string() }).passthrough()).optional(),\n});\n\nexport type SendSlackMessageBody = z.infer<typeof sendSlackMessageBodySchema>;\n\nconst sendSlackMessageResponseSchema = z.object({\n ok: z.literal(true),\n ts: z.string().optional(),\n channel: z.string().optional(),\n});\n\nexport type SendSlackMessageResponse = z.infer<\n typeof sendSlackMessageResponseSchema\n>;\n\nexport const integrationsSlackMessageContract = c.router({\n sendMessage: {\n method: \"POST\",\n path: \"/api/zero/integrations/slack/message\",\n headers: authHeadersSchema,\n body: sendSlackMessageBodySchema,\n responses: {\n 200: sendSlackMessageResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Send a Slack message via org bot token\",\n },\n});\n\nexport type IntegrationsSlackMessageContract =\n typeof integrationsSlackMessageContract;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\n// ---------------------------------------------------------------------------\n// Response schemas\n// ---------------------------------------------------------------------------\n\nconst autoRechargeSchema = z.object({\n enabled: z.boolean(),\n threshold: z.number().nullable(),\n amount: z.number().nullable(),\n});\n\nconst creditExpirySchema = z.object({\n expiringNextCycle: z.number(),\n nextExpiryDate: z.string().nullable(),\n});\n\nconst billingStatusResponseSchema = z.object({\n tier: z.string(),\n credits: z.number(),\n subscriptionStatus: z.string().nullable(),\n currentPeriodEnd: z.string().nullable(),\n cancelAtPeriodEnd: z.boolean(),\n hasSubscription: z.boolean(),\n autoRecharge: autoRechargeSchema,\n creditExpiry: creditExpirySchema,\n});\n\nconst checkoutResponseSchema = z.object({\n url: z.string(),\n});\n\nconst portalResponseSchema = z.object({\n url: z.string(),\n});\n\n// ---------------------------------------------------------------------------\n// Request schemas\n// ---------------------------------------------------------------------------\n\nconst checkoutRequestSchema = z.object({\n tier: z.enum([\"pro\", \"team\"]),\n successUrl: z.string().url(),\n cancelUrl: z.string().url(),\n});\n\nconst portalRequestSchema = z.object({\n returnUrl: z.string().min(1),\n});\n\nconst autoRechargeUpdateRequestSchema = z.object({\n enabled: z.boolean(),\n threshold: z.number().int().positive().optional(),\n amount: z.number().int().min(1000).optional(),\n});\n\n// ---------------------------------------------------------------------------\n// Contracts\n// ---------------------------------------------------------------------------\n\n/**\n * Zero contract for GET /api/zero/billing/status\n */\nexport const zeroBillingStatusContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/billing/status\",\n headers: authHeadersSchema,\n responses: {\n 200: billingStatusResponseSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Get billing status for current org\",\n },\n});\n\nexport type ZeroBillingStatusContract = typeof zeroBillingStatusContract;\n\n/**\n * Zero contract for POST /api/zero/billing/checkout\n */\nexport const zeroBillingCheckoutContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/billing/checkout\",\n headers: authHeadersSchema,\n body: checkoutRequestSchema,\n responses: {\n 200: checkoutResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n 503: apiErrorSchema,\n },\n summary: \"Create Stripe checkout session\",\n },\n});\n\nexport type ZeroBillingCheckoutContract = typeof zeroBillingCheckoutContract;\n\n/**\n * Zero contract for POST /api/zero/billing/portal\n */\nexport const zeroBillingPortalContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/billing/portal\",\n headers: authHeadersSchema,\n body: portalRequestSchema,\n responses: {\n 200: portalResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n 503: apiErrorSchema,\n },\n summary: \"Create Stripe billing portal session\",\n },\n});\n\nexport type ZeroBillingPortalContract = typeof zeroBillingPortalContract;\n\n/**\n * Zero contract for /api/zero/billing/auto-recharge\n */\nexport const zeroBillingAutoRechargeContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/billing/auto-recharge\",\n headers: authHeadersSchema,\n responses: {\n 200: autoRechargeSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Get auto-recharge configuration\",\n },\n update: {\n method: \"PUT\",\n path: \"/api/zero/billing/auto-recharge\",\n headers: authHeadersSchema,\n body: autoRechargeUpdateRequestSchema,\n responses: {\n 200: autoRechargeSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Update auto-recharge configuration\",\n },\n});\n\nexport type ZeroBillingAutoRechargeContract =\n typeof zeroBillingAutoRechargeContract;\n\n/**\n * Zero contract for GET /api/zero/billing/invoices\n */\nconst invoiceSchema = z.object({\n id: z.string(),\n number: z.string().nullable(),\n date: z.number(),\n amount: z.number(),\n status: z.string().nullable(),\n hostedInvoiceUrl: z.string().nullable(),\n});\n\nconst billingInvoicesResponseSchema = z.object({\n invoices: z.array(invoiceSchema),\n});\n\nexport const zeroBillingInvoicesContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/billing/invoices\",\n headers: authHeadersSchema,\n responses: {\n 200: billingInvoicesResponseSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Get invoices for current org\",\n },\n});\n\nexport type ZeroBillingInvoicesContract = typeof zeroBillingInvoicesContract;\n\n// ---------------------------------------------------------------------------\n// Downgrade\n// ---------------------------------------------------------------------------\n\nconst downgradeRequestSchema = z.object({\n targetTier: z.enum([\"free\", \"pro\"]),\n});\n\nconst downgradeResponseSchema = z.object({\n success: z.boolean(),\n effectiveDate: z.string().nullable(),\n});\n\n/**\n * Zero contract for POST /api/zero/billing/downgrade\n */\nexport const zeroBillingDowngradeContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/billing/downgrade\",\n headers: authHeadersSchema,\n body: downgradeRequestSchema,\n responses: {\n 200: downgradeResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 500: apiErrorSchema,\n 503: apiErrorSchema,\n },\n summary: \"Downgrade subscription to a lower tier\",\n },\n});\n\nexport type ZeroBillingDowngradeContract = typeof zeroBillingDowngradeContract;\n\n// Inferred types from Zod schemas\nexport type BillingStatusResponse = z.infer<typeof billingStatusResponseSchema>;\nexport type AutoRechargeConfig = z.infer<typeof autoRechargeSchema>;\nexport type CheckoutResponse = z.infer<typeof checkoutResponseSchema>;\nexport type PortalResponse = z.infer<typeof portalResponseSchema>;\nexport type BillingInvoice = z.infer<typeof invoiceSchema>;\nexport type BillingInvoicesResponse = z.infer<\n typeof billingInvoicesResponseSchema\n>;\nexport type DowngradeResponse = z.infer<typeof downgradeResponseSchema>;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\nconst memberUsageSchema = z.object({\n userId: z.string(),\n email: z.string(),\n inputTokens: z.number(),\n outputTokens: z.number(),\n cacheReadInputTokens: z.number(),\n cacheCreationInputTokens: z.number(),\n creditsCharged: z.number(),\n creditCap: z.number().nullable(),\n});\n\nconst usageMembersResponseSchema = z.object({\n period: z\n .object({\n start: z.string(),\n end: z.string(),\n })\n .nullable(),\n members: z.array(memberUsageSchema),\n});\n\n/**\n * Zero contract for GET /api/zero/usage/members\n */\nexport const zeroUsageMembersContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/usage/members\",\n headers: authHeadersSchema,\n responses: {\n 200: usageMembersResponseSchema,\n 401: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Get per-member usage for current billing period\",\n },\n});\n\nexport type ZeroUsageMembersContract = typeof zeroUsageMembersContract;\n\n// Inferred types from Zod schemas\nexport type MemberUsage = z.infer<typeof memberUsageSchema>;\nexport type UsageMembersResponse = z.infer<typeof usageMembersResponseSchema>;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\nconst teamComposeItemSchema = z.object({\n id: z.string(),\n displayName: z.string().nullable(),\n description: z.string().nullable(),\n sound: z.string().nullable(),\n avatarUrl: z.string().nullable(),\n headVersionId: z.string().nullable(),\n updatedAt: z.string(),\n});\n\n/**\n * Zero team contract (GET /api/zero/team)\n * Lists all agents in the user's active Clerk org.\n */\nexport const zeroTeamContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/team\",\n headers: authHeadersSchema,\n responses: {\n 200: z.array(teamComposeItemSchema),\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"List all agents in the user's active org\",\n },\n});\n\nexport type ZeroTeamContract = typeof zeroTeamContract;\nexport type TeamComposeItem = z.infer<typeof teamComposeItemSchema>;\nexport { teamComposeItemSchema };\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\nconst slackEnvironmentSchema = z.object({\n requiredSecrets: z.array(z.string()),\n requiredVars: z.array(z.string()),\n missingSecrets: z.array(z.string()),\n missingVars: z.array(z.string()),\n});\n\nconst slackOrgStatusSchema = z.object({\n isConnected: z.boolean(),\n isInstalled: z.boolean().optional(),\n workspaceName: z.string().nullable().optional(),\n isAdmin: z.boolean(),\n installUrl: z.string().nullable().optional(),\n connectUrl: z.string().nullable().optional(),\n defaultAgentName: z.string().nullable().optional(),\n agentOrgSlug: z.string().nullable().optional(),\n environment: slackEnvironmentSchema.optional(),\n /** True when the installation's granted scopes are outdated (admin-only). */\n scopeMismatch: z.boolean().optional(),\n /** OAuth install URL for re-authorization (admin-only, when scopeMismatch). */\n reinstallUrl: z.string().nullable().optional(),\n});\n\n/**\n * Zero integrations Slack contract (GET/DELETE /api/zero/integrations/slack)\n * Manages org-scoped Slack workspace info.\n */\nexport const zeroIntegrationsSlackContract = c.router({\n getStatus: {\n method: \"GET\",\n path: \"/api/zero/integrations/slack\",\n headers: authHeadersSchema,\n responses: {\n 200: slackOrgStatusSchema,\n 401: apiErrorSchema,\n },\n summary: \"Get org-scoped Slack workspace info\",\n },\n disconnect: {\n method: \"DELETE\",\n path: \"/api/zero/integrations/slack\",\n headers: authHeadersSchema,\n body: c.noBody(),\n query: z.object({\n action: z.string().optional(),\n }),\n responses: {\n 200: z.object({ ok: z.boolean() }),\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Disconnect or uninstall Slack workspace\",\n },\n});\n\nexport type ZeroIntegrationsSlackContract =\n typeof zeroIntegrationsSlackContract;\nexport type SlackOrgStatus = z.infer<typeof slackOrgStatusSchema>;\nexport { slackOrgStatusSchema };\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\nconst slackConnectStatusSchema = z.object({\n isConnected: z.boolean(),\n isAdmin: z.boolean(),\n workspaceName: z.string().nullable().optional(),\n defaultAgentName: z.string().nullable().optional(),\n});\n\nconst slackConnectResponseSchema = z.object({\n success: z.boolean(),\n connectionId: z.string(),\n role: z.string(),\n});\n\n/**\n * Zero Slack connect contract (GET/POST /api/zero/integrations/slack/connect)\n * Manages per-user Slack connection.\n */\nexport const zeroSlackConnectContract = c.router({\n getStatus: {\n method: \"GET\",\n path: \"/api/zero/integrations/slack/connect\",\n headers: authHeadersSchema,\n responses: {\n 200: slackConnectStatusSchema,\n 401: apiErrorSchema,\n },\n summary: \"Check user Slack connection status\",\n },\n connect: {\n method: \"POST\",\n path: \"/api/zero/integrations/slack/connect\",\n headers: authHeadersSchema,\n body: z.object({\n workspaceId: z.string().min(1),\n slackUserId: z.string().min(1),\n channelId: z.string().optional(),\n threadTs: z.string().optional(),\n }),\n responses: {\n 200: slackConnectResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Connect user to Slack workspace\",\n },\n});\n\nexport type ZeroSlackConnectContract = typeof zeroSlackConnectContract;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\nconst slackChannelSchema = z.object({\n id: z.string(),\n name: z.string(),\n});\n\n/**\n * Zero Slack channels contract (GET /api/zero/slack/channels)\n * Lists Slack channels where the bot is a member.\n */\nexport const zeroSlackChannelsContract = c.router({\n list: {\n method: \"GET\",\n path: \"/api/zero/slack/channels\",\n headers: authHeadersSchema,\n responses: {\n 200: z.object({ channels: z.array(slackChannelSchema) }),\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"List Slack channels where bot is a member\",\n },\n});\n\nexport type ZeroSlackChannelsContract = typeof zeroSlackChannelsContract;\nexport type SlackChannel = z.infer<typeof slackChannelSchema>;\nexport { slackChannelSchema };\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\nconst queuePositionResponseSchema = z.object({\n position: z.number(),\n total: z.number(),\n});\n\n/**\n * Zero queue position contract (GET /api/zero/queue-position)\n * Returns the position of a queued run within its org queue.\n */\nexport const zeroQueuePositionContract = c.router({\n getPosition: {\n method: \"GET\",\n path: \"/api/zero/queue-position\",\n headers: authHeadersSchema,\n query: z.object({\n runId: z.string().min(1, \"runId is required\"),\n }),\n responses: {\n 200: queuePositionResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get queue position for a run\",\n },\n});\n\nexport type ZeroQueuePositionContract = typeof zeroQueuePositionContract;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\nconst memberCreditCapResponseSchema = z.object({\n userId: z.string(),\n creditCap: z.number().nullable(),\n creditEnabled: z.boolean(),\n});\n\n/**\n * Zero member credit cap contract (GET/PUT /api/zero/org/members/credit-cap)\n */\nexport const zeroMemberCreditCapContract = c.router({\n get: {\n method: \"GET\",\n path: \"/api/zero/org/members/credit-cap\",\n headers: authHeadersSchema,\n query: z.object({\n userId: z.string().min(1, \"userId is required\"),\n }),\n responses: {\n 200: memberCreditCapResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n },\n summary: \"Get member credit cap\",\n },\n set: {\n method: \"PUT\",\n path: \"/api/zero/org/members/credit-cap\",\n headers: authHeadersSchema,\n body: z.object({\n userId: z.string().min(1),\n creditCap: z.number().int().positive().nullable(),\n }),\n responses: {\n 200: memberCreditCapResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"Set or clear member credit cap\",\n },\n});\n\nexport type ZeroMemberCreditCapContract = typeof zeroMemberCreditCapContract;\n","import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\n// ---------------------------------------------------------------------------\n// Schemas\n// ---------------------------------------------------------------------------\n\nconst askUserQuestionItemSchema = z.object({\n question: z.string().min(1),\n header: z.string().max(12).optional(),\n options: z\n .array(\n z.object({\n label: z.string(),\n description: z.string().optional(),\n }),\n )\n .min(1),\n multiSelect: z.boolean().optional(),\n});\n\nexport type AskUserQuestionItem = z.infer<typeof askUserQuestionItemSchema>;\n\nconst askUserQuestionBodySchema = z.object({\n questions: z.array(askUserQuestionItemSchema).min(1),\n});\n\nexport type AskUserQuestionBody = z.infer<typeof askUserQuestionBodySchema>;\n\nconst askUserQuestionResponseSchema = z.object({\n pendingId: z.string().uuid(),\n});\n\nexport type AskUserQuestionResponse = z.infer<\n typeof askUserQuestionResponseSchema\n>;\n\nexport const askUserAnswerStatusSchema = z.enum([\n \"pending\",\n \"answered\",\n \"expired\",\n]);\n\nexport type AskUserAnswerStatus = z.infer<typeof askUserAnswerStatusSchema>;\n\nconst askUserAnswerResponseSchema = z.object({\n status: askUserAnswerStatusSchema,\n answer: z.string().optional(),\n});\n\nexport type AskUserAnswerResponse = z.infer<typeof askUserAnswerResponseSchema>;\n\n// ---------------------------------------------------------------------------\n// Contracts\n// ---------------------------------------------------------------------------\n\nexport const zeroAskUserQuestionContract = c.router({\n postQuestion: {\n method: \"POST\",\n path: \"/api/zero/ask-user/question\",\n headers: authHeadersSchema,\n body: askUserQuestionBodySchema,\n responses: {\n 200: askUserQuestionResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n },\n summary:\n \"Submit a question for the user and receive a pending ID for polling\",\n },\n});\n\nexport type ZeroAskUserQuestionContract = typeof zeroAskUserQuestionContract;\n\nexport const zeroAskUserAnswerContract = c.router({\n getAnswer: {\n method: \"GET\",\n path: \"/api/zero/ask-user/answer\",\n headers: authHeadersSchema,\n query: z.object({\n pendingId: z.string().uuid(),\n }),\n responses: {\n 200: askUserAnswerResponseSchema,\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Poll for the user's answer to a pending question\",\n },\n});\n\nexport type ZeroAskUserAnswerContract = typeof zeroAskUserAnswerContract;\n","/**\n * Storage name generation functions for agent instructions and skills.\n * These functions create standardized storage names used across CLI and Web packages.\n */\n\n/**\n * Sentinel userId for org-level storages (volumes).\n * Volumes are shared resources within an org — they use this constant\n * instead of a real userId so the (orgId, userId, name, type)\n * constraint keeps them unique per org, not per user.\n */\nexport const VOLUME_ORG_USER_ID = \"__org__\";\n\n/**\n * Sentinel orgId for system-level storages (shared across all orgs).\n * Used for official skills that are cached globally, not per-org.\n */\nexport const SYSTEM_ORG_ID = \"__system__\";\n\n/**\n * Generate the storage name for agent instructions.\n * Format: agent-instructions@{agentName}\n *\n * @param agentName - Name of the agent (compose name)\n * @returns Storage name for the instructions\n */\nexport function getInstructionsStorageName(agentName: string): string {\n return `agent-instructions@${agentName}`;\n}\n\n/**\n * Generate the storage name for an agent skill.\n * Format: agent-skills@{fullPath}\n *\n * @param fullPath - Full path from GitHub URL (e.g., \"owner/repo/tree/branch/path\")\n * @returns Storage name for the skill\n */\nexport function getSkillStorageName(fullPath: string): string {\n return `agent-skills@${fullPath}`;\n}\n\n/**\n * Generate the storage name for a custom skill.\n * Format: custom-skill@{skillName}\n *\n * @param skillName - Name of the custom skill (e.g., \"my-skill\")\n * @returns Storage name for the custom skill\n */\nexport function getCustomSkillStorageName(skillName: string): string {\n return `custom-skill@${skillName}`;\n}\n","/**\n * Framework utilities\n *\n * Defines supported agent frameworks and validation functions.\n */\n\n/**\n * Supported framework identifiers\n */\nexport const SUPPORTED_FRAMEWORKS = [\"claude-code\"] as const;\n\nexport type SupportedFramework = (typeof SUPPORTED_FRAMEWORKS)[number];\n\n/**\n * Check if a framework is supported\n */\nexport function isSupportedFramework(\n framework: string | undefined,\n): framework is SupportedFramework {\n if (!framework) return false;\n return SUPPORTED_FRAMEWORKS.includes(framework as SupportedFramework);\n}\n\n/**\n * Assert that a framework is supported, throwing an error if not\n *\n * @param framework - The framework to validate\n * @param context - Optional context for the error message (e.g., function name)\n * @throws Error if framework is not supported\n */\nexport function assertSupportedFramework(\n framework: string | undefined,\n context?: string,\n): asserts framework is SupportedFramework {\n if (!isSupportedFramework(framework)) {\n const contextMsg = context ? ` in ${context}` : \"\";\n throw new Error(\n `Unsupported framework \"${framework}\"${contextMsg}. Supported frameworks: ${SUPPORTED_FRAMEWORKS.join(\", \")}`,\n );\n }\n}\n\n/**\n * Get a validated framework, defaulting to claude-code if undefined\n *\n * Use this for functions where undefined framework should default to claude-code.\n * Throws an error for unknown frameworks.\n *\n * @param framework - The framework to validate (undefined defaults to claude-code)\n * @returns The validated framework\n * @throws Error if framework is defined but not supported\n */\nexport function getValidatedFramework(\n framework: string | undefined,\n): SupportedFramework {\n if (framework === undefined) {\n return \"claude-code\";\n }\n assertSupportedFramework(framework);\n return framework;\n}\n\n/**\n * Framework display names for UI\n */\nconst FRAMEWORK_DISPLAY_NAMES: Record<SupportedFramework, string> = {\n \"claude-code\": \"Claude Code\",\n};\n\n/**\n * Get the display name for a framework\n *\n * @param framework - The framework identifier\n * @returns The human-readable display name\n * @throws Error if framework is not supported\n */\nexport function getFrameworkDisplayName(framework: string): string {\n assertSupportedFramework(framework);\n return FRAMEWORK_DISPLAY_NAMES[framework];\n}\n\n/**\n * Canonical instructions filename for each framework.\n */\nconst FRAMEWORK_INSTRUCTIONS_FILENAMES: Record<SupportedFramework, string> = {\n \"claude-code\": \"CLAUDE.md\",\n};\n\n/**\n * Get the canonical instructions filename for a framework\n *\n * Each framework expects instructions at a specific filename:\n * - claude-code: CLAUDE.md (read from ~/.claude/)\n *\n * Used by CLI (upload) and web API (read) to ensure a symmetric contract.\n *\n * @param framework - The framework name (undefined defaults to claude-code)\n * @returns The canonical filename for instructions\n * @throws Error if framework is defined but not supported\n */\nexport function getInstructionsFilename(framework?: string): string {\n const validated = getValidatedFramework(framework);\n return FRAMEWORK_INSTRUCTIONS_FILENAMES[validated];\n}\n","/**\n * Feature switch system\n *\n * Provides centralized feature flag management with user-identity based overrides.\n * User IDs are stored as SHA-1 hashes to avoid exposing plain-text identifiers in source code.\n */\n\nimport { FeatureSwitchKey } from \"./feature-switch-key\";\n\nexport interface FeatureSwitch {\n readonly maintainer: string;\n readonly enabled: boolean;\n readonly enabledUserHashes?: readonly string[];\n readonly enabledEmailHashes?: readonly string[];\n readonly enabledOrgIdHashes?: readonly string[];\n}\n\nexport interface FeatureSwitchContext {\n readonly userId?: string;\n readonly email?: string;\n readonly orgId?: string;\n}\n\nconst sha1Cache = new Map<string, string>();\n\nasync function sha1(input: string): Promise<string> {\n const cached = sha1Cache.get(input);\n if (cached) return cached;\n\n const data = new TextEncoder().encode(input);\n const hashBuffer = await crypto.subtle.digest(\"SHA-1\", data);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const hex = hashArray\n .map((b) => {\n return b.toString(16).padStart(2, \"0\");\n })\n .join(\"\");\n sha1Cache.set(input, hex);\n return hex;\n}\n\n/**\n * Compute the SHA-1 hash of an email address (lowercased).\n * Used for email-based feature switch targeting.\n */\nexport async function computeEmailHash(email: string): Promise<string> {\n return sha1(email.toLowerCase());\n}\n\n/**\n * Compute the SHA-1 hash of an organization ID.\n * Used for org-based feature switch targeting.\n * No lowercasing — orgId is case-sensitive.\n */\nexport async function computeOrgIdHash(orgId: string): Promise<string> {\n return sha1(orgId);\n}\n\nconst STAFF_USER_HASHES: readonly string[] = [\n \"afc25aa601481d794372ed765038148d3a160e2a\",\n \"1e7de00267c699185653df499f68e8383013ca08\",\n \"b397fa9b0330b421a5113ac88dd2b01ca2067cfe\",\n \"d938bb6e49cb8ccfaa962942d69c9ccd1ee239af\",\n \"67a65740246389d7fecf7702f8b7d6914ad38dc5\",\n \"55651a8b2c85b35ff0629fa3d4718b9476069d0f\",\n];\n\nconst STAFF_ORG_ID_HASHES: readonly string[] = [\n \"65de87977d6d1712cd88d7768209f33f7ed12e0b\", // org_3ANttyrbWYJk6JKRSTRLEsbsDLe\n];\n\n/**\n * Registry of all feature switches\n */\nconst FEATURE_SWITCHES: Record<FeatureSwitchKey, FeatureSwitch> = {\n [FeatureSwitchKey.Pricing]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: true,\n },\n [FeatureSwitchKey.Dummy]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: true,\n },\n [FeatureSwitchKey.Agents]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: true,\n },\n [FeatureSwitchKey.Secrets]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n },\n [FeatureSwitchKey.Artifacts]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n },\n [FeatureSwitchKey.ApiKeys]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n },\n [FeatureSwitchKey.AhrefsConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.CanvaConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.ComputerConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.DeelConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.DocuSignConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.DropboxConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.FigmaConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.MercuryConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.NeonConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.GarminConnectConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n\n [FeatureSwitchKey.RedditConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.SupabaseConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.CloseConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.WebflowConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.OutlookMailConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.OutlookCalendarConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.MetaAdsConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.StripeConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.PosthogConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.MailchimpConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.ResendConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.SpotifyConnector]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.GitHubIntegration]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.TelegramIntegration]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.DataExport]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.ShowSystemPrompt]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.Usage]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.ConcurrentAddOn]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n },\n [FeatureSwitchKey.CreditAddOn]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n },\n [FeatureSwitchKey.ModelDetail]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.RunContext]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledUserHashes: STAFF_USER_HASHES,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n [FeatureSwitchKey.ActivityLogList]: {\n maintainer: \"ethan@vm0.ai\",\n enabled: false,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\n },\n};\n\ninterface ResolvedHashes {\n readonly userHash?: string;\n readonly emailHash?: string;\n readonly orgIdHash?: string;\n}\n\nfunction evaluateSwitch(fs: FeatureSwitch, hashes: ResolvedHashes): boolean {\n if (fs.enabled) return true;\n if (hashes.userHash && fs.enabledUserHashes?.includes(hashes.userHash))\n return true;\n if (hashes.emailHash && fs.enabledEmailHashes?.includes(hashes.emailHash))\n return true;\n if (hashes.orgIdHash && fs.enabledOrgIdHashes?.includes(hashes.orgIdHash))\n return true;\n return false;\n}\n\n/**\n * Evaluate all feature switches at once for the given context.\n *\n * Computes identity hashes once and checks all switches synchronously,\n * avoiding per-key async overhead.\n */\nexport async function getAllFeatureStates(\n ctx?: FeatureSwitchContext,\n): Promise<Record<FeatureSwitchKey, boolean>> {\n const switches = Object.values(FEATURE_SWITCHES);\n const hashes: ResolvedHashes = {\n userHash:\n ctx?.userId &&\n switches.some((s) => {\n return s.enabledUserHashes?.length;\n })\n ? await sha1(ctx.userId)\n : undefined,\n emailHash:\n ctx?.email &&\n switches.some((s) => {\n return s.enabledEmailHashes?.length;\n })\n ? await sha1(ctx.email.toLowerCase())\n : undefined,\n orgIdHash:\n ctx?.orgId &&\n switches.some((s) => {\n return s.enabledOrgIdHashes?.length;\n })\n ? await sha1(ctx.orgId)\n : undefined,\n };\n\n const result = {} as Record<FeatureSwitchKey, boolean>;\n for (const key of Object.values(FeatureSwitchKey)) {\n result[key] = evaluateSwitch(FEATURE_SWITCHES[key], hashes);\n }\n return result;\n}\n\n/**\n * Check if a feature is enabled for the given context.\n *\n * When `userId` is provided and the switch has `enabledUserHashes`,\n * the userId is SHA-1 hashed and compared against the stored hashes.\n * When `email` is provided and the switch has `enabledEmailHashes`,\n * the email is SHA-1 hashed (lowercased) and compared.\n * When `orgId` is provided and the switch has `enabledOrgIdHashes`,\n * the orgId is SHA-1 hashed and compared.\n */\nexport async function isFeatureEnabled(\n key: FeatureSwitchKey,\n ctx?: FeatureSwitchContext,\n): Promise<boolean> {\n const featureSwitch = FEATURE_SWITCHES[key];\n if (featureSwitch.enabled) {\n return true;\n }\n if (ctx?.userId && featureSwitch.enabledUserHashes?.length) {\n const hash = await sha1(ctx.userId);\n if (featureSwitch.enabledUserHashes.includes(hash)) return true;\n }\n if (ctx?.email && featureSwitch.enabledEmailHashes?.length) {\n const hash = await sha1(ctx.email.toLowerCase());\n if (featureSwitch.enabledEmailHashes.includes(hash)) return true;\n }\n if (ctx?.orgId && featureSwitch.enabledOrgIdHashes?.length) {\n const hash = await sha1(ctx.orgId);\n if (featureSwitch.enabledOrgIdHashes.includes(hash)) return true;\n }\n return false;\n}\n","import { parse as parseYaml } from \"yaml\";\n\n/**\n * Parsed skill frontmatter from SKILL.md\n */\nexport interface SkillFrontmatter {\n name?: string;\n description?: string;\n}\n\n/**\n * Parse frontmatter from SKILL.md content.\n * Extracts YAML between --- markers at the start of the file.\n *\n * @param content - Raw content of SKILL.md file\n * @returns Parsed frontmatter fields\n */\nexport function parseSkillFrontmatter(content: string): SkillFrontmatter {\n const frontmatterMatch = content.match(/^---\\r?\\n([\\s\\S]*?)\\r?\\n---/);\n if (!frontmatterMatch) {\n return {};\n }\n\n const yamlContent = frontmatterMatch[1];\n if (!yamlContent) {\n return {};\n }\n\n const parsed: unknown = parseYaml(yamlContent);\n\n if (!parsed || typeof parsed !== \"object\") {\n return {};\n }\n\n const data = parsed as Record<string, unknown>;\n\n return {\n name: typeof data.name === \"string\" ? data.name : undefined,\n description:\n typeof data.description === \"string\" ? data.description : undefined,\n };\n}\n","import chalk from \"chalk\";\nimport { RUN_ERROR_GUIDANCE } from \"@vm0/core\";\nimport { ApiRequestError } from \"../api/core/client-factory\";\n\n/**\n * Wraps a Commander.js action handler with centralized error handling.\n *\n * Catches errors thrown by the action, formats them consistently,\n * and calls process.exit(1). Commands with specific error handling\n * should use an inner try/catch and re-throw for generic handling.\n */\nexport function withErrorHandler<T extends unknown[]>(\n fn: (...args: T) => Promise<void>,\n): (...args: T) => Promise<void> {\n return async (...args: T) => {\n try {\n await fn(...args);\n } catch (error) {\n if (error instanceof ApiRequestError) {\n if (error.code === \"UNAUTHORIZED\") {\n if (process.env.ZERO_TOKEN) {\n console.error(chalk.red(\"✗ Authentication failed\"));\n console.error(chalk.dim(\" ZERO_TOKEN is invalid or expired\"));\n } else {\n console.error(chalk.red(\"✗ Not authenticated\"));\n console.error(chalk.dim(\" Run: vm0 auth login\"));\n }\n } else {\n const guidance = RUN_ERROR_GUIDANCE[error.code];\n if (guidance) {\n console.error(chalk.red(`✗ ${guidance.title}`));\n console.error(chalk.dim(` ${guidance.guidance}`));\n if (guidance.cliHint) {\n console.error(chalk.dim(` Run: ${guidance.cliHint}`));\n }\n } else {\n console.error(chalk.red(`✗ ${error.status}: ${error.message}`));\n }\n }\n } else if (error instanceof Error) {\n console.error(chalk.red(`✗ ${error.message}`));\n } else {\n console.error(chalk.red(\"✗ An unexpected error occurred\"));\n }\n\n if (error instanceof Error && error.cause instanceof Error) {\n console.error(chalk.dim(` Cause: ${error.cause.message}`));\n }\n\n process.exit(1);\n }\n };\n}\n","import { getApiUrl, getActiveToken } from \"../config\";\nimport type { ApiErrorResponse } from \"@vm0/core\";\n\n/**\n * Custom API request error with code and HTTP status\n */\nexport class ApiRequestError extends Error {\n constructor(\n message: string,\n public code: string,\n public status: number,\n ) {\n super(message);\n this.name = \"ApiRequestError\";\n }\n}\n\n/**\n * Build authentication headers from a token\n */\nfunction buildHeaders(token: string): Record<string, string> {\n // Note: Don't set Content-Type here - ts-rest automatically adds it for requests with body.\n // Setting Content-Type for bodyless requests (GET, DELETE) can cause server-side parsing issues.\n const headers: Record<string, string> = {\n Authorization: `Bearer ${token}`,\n };\n\n // Add Vercel bypass secret if available (for CI/preview deployments)\n const bypassSecret = process.env.VERCEL_AUTOMATION_BYPASS_SECRET;\n if (bypassSecret) {\n headers[\"x-vercel-protection-bypass\"] = bypassSecret;\n }\n\n return headers;\n}\n\n/**\n * Get base URL for API requests\n */\nexport async function getBaseUrl(): Promise<string> {\n const apiUrl = await getApiUrl();\n if (!apiUrl) {\n throw new Error(\"API URL not configured\");\n }\n return apiUrl;\n}\n\n/**\n * Configuration for ts-rest client initialization\n */\nexport async function getClientConfig() {\n const baseUrl = await getBaseUrl();\n const token = await getActiveToken();\n if (!token) {\n throw new ApiRequestError(\"Not authenticated\", \"UNAUTHORIZED\", 401);\n }\n const baseHeaders = buildHeaders(token);\n\n // JWT tokens carry orgId in payload — server extracts it from authCtx.orgId\n return { baseUrl, baseHeaders, jsonQuery: false as const };\n}\n\n/**\n * Handle API error responses and throw appropriate error.\n *\n * Parses the server error response and throws an ApiRequestError\n * with the server's message and code. Falls back to defaultMessage\n * if the server response doesn't include an error message.\n */\nexport function handleError(\n result: { status: number; body: unknown },\n defaultMessage: string,\n): never {\n const errorBody = result.body as ApiErrorResponse;\n const message = errorBody.error?.message || defaultMessage;\n const code = errorBody.error?.code || \"UNKNOWN\";\n throw new ApiRequestError(message, code, result.status);\n}\n","import { initClient } from \"@ts-rest/core\";\nimport {\n composesMainContract,\n composesByIdContract,\n composesVersionsContract,\n agentComposeApiContentSchema,\n} from \"@vm0/core\";\nimport type { z } from \"zod\";\nimport {\n ApiRequestError,\n getClientConfig,\n handleError,\n} from \"../core/client-factory\";\nimport type {\n GetComposeResponse,\n CreateComposeResponse,\n GetComposeVersionResponse,\n} from \"../core/types\";\n\nexport async function getComposeByName(\n name: string,\n): Promise<GetComposeResponse | null> {\n const config = await getClientConfig();\n const client = initClient(composesMainContract, config);\n\n const result = await client.getByName({\n query: { name },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n if (result.status === 404) {\n return null;\n }\n\n handleError(result, `Compose not found: ${name}`);\n}\n\nconst UUID_PATTERN =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\n/**\n * Resolve an agent identifier to a compose.\n * Accepts either a UUID (compose ID) or a human-readable compose name.\n * UUID is tried first; if the identifier is not a UUID, falls back to name lookup.\n */\nexport async function resolveCompose(\n identifier: string,\n): Promise<GetComposeResponse | null> {\n if (UUID_PATTERN.test(identifier)) {\n try {\n return await getComposeById(identifier);\n } catch (error) {\n if (error instanceof ApiRequestError && error.status === 404) {\n return null;\n }\n throw error;\n }\n }\n return getComposeByName(identifier);\n}\n\nexport async function getComposeById(id: string): Promise<GetComposeResponse> {\n const config = await getClientConfig();\n const client = initClient(composesByIdContract, config);\n\n const result = await client.getById({\n params: { id },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, `Compose not found: ${id}`);\n}\n\n/**\n * Resolve a version specifier to a full version ID\n * Supports: \"latest\", full hash (64 chars), or hash prefix (8+ chars)\n */\nexport async function getComposeVersion(\n composeId: string,\n version: string,\n): Promise<GetComposeVersionResponse> {\n const config = await getClientConfig();\n const client = initClient(composesVersionsContract, config);\n\n const result = await client.resolveVersion({\n query: { composeId, version },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, `Version not found: ${version}`);\n}\n\nexport async function createOrUpdateCompose(body: {\n content: unknown;\n}): Promise<CreateComposeResponse> {\n const config = await getClientConfig();\n const client = initClient(composesMainContract, config);\n\n const result = await client.create({\n body: body as { content: z.infer<typeof agentComposeApiContentSchema> },\n });\n\n // Both 200 and 201 are success cases\n if (result.status === 200 || result.status === 201) {\n return result.body;\n }\n\n handleError(result, \"Failed to create compose\");\n}\n","import { initClient } from \"@ts-rest/core\";\nimport {\n zeroUserPreferencesContract,\n type UserPreferencesResponse,\n} from \"@vm0/core\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\n/**\n * Get current user's preferences\n */\nexport async function getZeroUserPreferences(): Promise<UserPreferencesResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroUserPreferencesContract, config);\n\n const result = await client.get({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to get user preferences\");\n}\n\n/**\n * Update user preferences\n */\nexport async function updateZeroUserPreferences(body: {\n timezone?: string;\n}): Promise<UserPreferencesResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroUserPreferencesContract, config);\n\n const result = await client.update({ body });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to update user preferences\");\n}\n","import { initClient } from \"@ts-rest/core\";\nimport { skillsResolveContract } from \"@vm0/core\";\nimport { getClientConfig } from \"../core/client-factory\";\nimport chalk from \"chalk\";\n\n/**\n * Batch-resolve skill URLs against the server's skill cache.\n * Returns resolved skills (cached) and unresolved skills (need download).\n * Gracefully degrades: any error returns all skills as unresolved.\n */\nexport async function resolveSkills(skillUrls: string[]) {\n try {\n const config = await getClientConfig();\n const client = initClient(skillsResolveContract, config);\n const result = await client.resolve({ body: { skills: skillUrls } });\n if (result.status === 200) return result.body;\n console.error(\n chalk.dim(\" Skill resolve unavailable, downloading all skills\"),\n );\n return { resolved: {}, unresolved: skillUrls };\n } catch {\n console.error(\n chalk.dim(\" Skill resolve unavailable, downloading all skills\"),\n );\n return { resolved: {}, unresolved: skillUrls };\n }\n}\n","import { initClient } from \"@ts-rest/core\";\nimport { zeroSecretsContract, zeroSecretsByNameContract } from \"@vm0/core\";\nimport type { SecretResponse, SecretListResponse } from \"@vm0/core\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\n/**\n * List user-level secrets via zero API (metadata only, no values)\n */\nexport async function listZeroSecrets(): Promise<SecretListResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroSecretsContract, config);\n\n const result = await client.list({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to list secrets\");\n}\n\n/**\n * Set (create or update) a user-level secret via zero API\n */\nexport async function setZeroSecret(body: {\n name: string;\n value: string;\n description?: string;\n}): Promise<SecretResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroSecretsContract, config);\n\n const result = await client.set({ body });\n\n if (result.status === 200 || result.status === 201) {\n return result.body;\n }\n\n handleError(result, \"Failed to set secret\");\n}\n\n/**\n * Delete a user-level secret by name via zero API\n */\nexport async function deleteZeroSecret(name: string): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroSecretsByNameContract, config);\n\n const result = await client.delete({\n params: { name },\n });\n\n if (result.status === 204) {\n return;\n }\n\n handleError(result, `Secret \"${name}\" not found`);\n}\n","import { initClient } from \"@ts-rest/core\";\nimport { zeroVariablesContract, zeroVariablesByNameContract } from \"@vm0/core\";\nimport type { VariableResponse, VariableListResponse } from \"@vm0/core\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\n/**\n * List user-level variables via zero API (includes values)\n */\nexport async function listZeroVariables(): Promise<VariableListResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroVariablesContract, config);\n\n const result = await client.list({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to list variables\");\n}\n\n/**\n * Set (create or update) a user-level variable via zero API\n */\nexport async function setZeroVariable(body: {\n name: string;\n value: string;\n description?: string;\n}): Promise<VariableResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroVariablesContract, config);\n\n const result = await client.set({ body });\n\n if (result.status === 200 || result.status === 201) {\n return result.body;\n }\n\n handleError(result, \"Failed to set variable\");\n}\n\n/**\n * Delete a user-level variable by name via zero API\n */\nexport async function deleteZeroVariable(name: string): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroVariablesByNameContract, config);\n\n const result = await client.delete({\n params: { name },\n });\n\n if (result.status === 204) {\n return;\n }\n\n handleError(result, `Variable \"${name}\" not found`);\n}\n","import { initClient } from \"@ts-rest/core\";\nimport {\n zeroConnectorsMainContract,\n zeroConnectorsByTypeContract,\n zeroConnectorSessionsContract,\n zeroConnectorSessionByIdContract,\n zeroComputerConnectorContract,\n type ConnectorListResponse,\n type ConnectorResponse,\n type ConnectorSessionResponse,\n type ConnectorSessionStatusResponse,\n type ComputerConnectorCreateResponse,\n type ConnectorType,\n} from \"@vm0/core\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\n/**\n * List all connectors for the authenticated user (zero proxy)\n */\nexport async function listZeroConnectors(): Promise<ConnectorListResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroConnectorsMainContract, config);\n\n const result = await client.list({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to list connectors\");\n}\n\n/**\n * Get a connector by type (zero proxy)\n * Returns null if not connected (404 response)\n */\nexport async function getZeroConnector(\n type: ConnectorType,\n): Promise<ConnectorResponse | null> {\n const config = await getClientConfig();\n const client = initClient(zeroConnectorsByTypeContract, config);\n\n const result = await client.get({\n params: { type },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n if (result.status === 404) {\n return null;\n }\n\n handleError(result, `Failed to get connector \"${type}\"`);\n}\n\n/**\n * Delete (disconnect) a connector by type (zero proxy)\n */\nexport async function deleteZeroConnector(type: ConnectorType): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroConnectorsByTypeContract, config);\n\n const result = await client.delete({\n params: { type },\n });\n\n if (result.status === 204) {\n return;\n }\n\n handleError(result, `Connector \"${type}\" not found`);\n}\n\n/**\n * Create a connector session for OAuth device flow (zero proxy)\n */\nexport async function createZeroConnectorSession(\n type: ConnectorType,\n): Promise<ConnectorSessionResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroConnectorSessionsContract, config);\n\n const result = await client.create({\n params: { type },\n body: {},\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to create connector session\");\n}\n\n/**\n * Get connector session status (zero proxy)\n */\nexport async function getZeroConnectorSession(\n type: ConnectorType,\n sessionId: string,\n): Promise<ConnectorSessionStatusResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroConnectorSessionByIdContract, config);\n\n const result = await client.get({\n params: { type, sessionId },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to get connector session status\");\n}\n\n/**\n * Create a computer connector (zero proxy)\n */\nexport async function createZeroComputerConnector(): Promise<ComputerConnectorCreateResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroComputerConnectorContract, config);\n\n const result = await client.create({\n body: {},\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to create computer connector\");\n}\n\n/**\n * Delete (disconnect) a computer connector (zero proxy)\n */\nexport async function deleteZeroComputerConnector(): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroComputerConnectorContract, config);\n\n const result = await client.delete({});\n\n if (result.status === 204) {\n return;\n }\n\n handleError(result, \"Computer connector not found\");\n}\n","import { initClient } from \"@ts-rest/core\";\nimport {\n runSystemLogContract,\n runMetricsContract,\n runAgentEventsContract,\n runNetworkLogsContract,\n logsSearchContract,\n type SystemLogResponse,\n type MetricsResponse,\n type AgentEventsResponse,\n type NetworkLogsResponse,\n type LogsSearchResponse,\n} from \"@vm0/core\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\n// Re-export types used by consumer commands (logs/index.ts, logs/search.ts)\nexport type {\n RunEvent,\n TelemetryMetric,\n NetworkLogEntry,\n LogsSearchResponse,\n} from \"@vm0/core\";\n\nexport async function getSystemLog(\n runId: string,\n options?: { since?: number; limit?: number; order?: \"asc\" | \"desc\" },\n): Promise<SystemLogResponse> {\n const config = await getClientConfig();\n const client = initClient(runSystemLogContract, config);\n\n const result = await client.getSystemLog({\n params: { id: runId },\n query: {\n since: options?.since,\n limit: options?.limit,\n order: options?.order,\n },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to fetch system log\");\n}\n\nexport async function getMetrics(\n runId: string,\n options?: { since?: number; limit?: number; order?: \"asc\" | \"desc\" },\n): Promise<MetricsResponse> {\n const config = await getClientConfig();\n const client = initClient(runMetricsContract, config);\n\n const result = await client.getMetrics({\n params: { id: runId },\n query: {\n since: options?.since,\n limit: options?.limit,\n order: options?.order,\n },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to fetch metrics\");\n}\n\nexport async function getAgentEvents(\n runId: string,\n options?: { since?: number; limit?: number; order?: \"asc\" | \"desc\" },\n): Promise<AgentEventsResponse> {\n const config = await getClientConfig();\n const client = initClient(runAgentEventsContract, config);\n\n const result = await client.getAgentEvents({\n params: { id: runId },\n query: {\n since: options?.since,\n limit: options?.limit,\n order: options?.order,\n },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to fetch agent events\");\n}\n\nexport async function getNetworkLogs(\n runId: string,\n options?: { since?: number; limit?: number; order?: \"asc\" | \"desc\" },\n): Promise<NetworkLogsResponse> {\n const config = await getClientConfig();\n const client = initClient(runNetworkLogsContract, config);\n\n const result = await client.getNetworkLogs({\n params: { id: runId },\n query: {\n since: options?.since,\n limit: options?.limit,\n order: options?.order,\n },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to fetch network logs\");\n}\n\nexport async function searchLogs(options: {\n keyword: string;\n agent?: string;\n runId?: string;\n since?: number;\n limit?: number;\n before?: number;\n after?: number;\n}): Promise<LogsSearchResponse> {\n const config = await getClientConfig();\n const client = initClient(logsSearchContract, config);\n\n const result = await client.searchLogs({\n query: {\n keyword: options.keyword,\n agent: options.agent,\n runId: options.runId,\n since: options.since,\n limit: options.limit,\n before: options.before,\n after: options.after,\n },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to search logs\");\n}\n","import { initClient } from \"@ts-rest/core\";\nimport {\n runsMainContract,\n runEventsContract,\n runsCancelContract,\n runsQueueContract,\n type RunsListResponse,\n type CancelRunResponse,\n type QueueResponse,\n type FirewallPolicies,\n} from \"@vm0/core\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\nimport type { CreateRunResponse, GetEventsResponse } from \"../core/types\";\n\n/**\n * Create a run with unified request format\n * Supports new runs, checkpoint resume, and session continue\n * Note: Environment variables are expanded server-side from vars\n */\nexport async function createRun(body: {\n // Shortcuts (mutually exclusive)\n checkpointId?: string;\n sessionId?: string;\n // Base parameters\n agentComposeId?: string;\n agentComposeVersionId?: string;\n conversationId?: string;\n artifactName?: string;\n artifactVersion?: string;\n memoryName?: string;\n vars?: Record<string, string>;\n secrets?: Record<string, string>;\n volumeVersions?: Record<string, string>;\n // Model provider for automatic secret injection\n modelProvider?: string;\n // Debug flag (internal use only)\n debugNoMockClaude?: boolean;\n // Environment validation flag - when true, validates secrets/vars before running\n checkEnv?: boolean;\n // Append text to the agent's system prompt\n appendSystemPrompt?: string;\n // Tools to disable in Claude CLI (passed as --disallowed-tools)\n disallowedTools?: string[];\n // Tools to make available in Claude CLI (passed as --tools)\n tools?: string[];\n // Settings JSON to pass to Claude CLI (passed as --settings)\n settings?: string;\n // Per-permission firewall policies\n firewallPolicies?: FirewallPolicies;\n // Required\n prompt: string;\n}): Promise<CreateRunResponse> {\n const config = await getClientConfig();\n const client = initClient(runsMainContract, config);\n\n const result = await client.create({ body });\n\n if (result.status === 201) {\n return result.body;\n }\n\n handleError(result, \"Failed to create run\");\n}\n\nexport async function getEvents(\n runId: string,\n options?: { since?: number; limit?: number },\n): Promise<GetEventsResponse> {\n const config = await getClientConfig();\n const client = initClient(runEventsContract, config);\n\n const result = await client.getEvents({\n params: { id: runId },\n query: {\n since: options?.since ?? -1,\n limit: options?.limit ?? 100,\n },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to fetch events\");\n}\n\n/**\n * List runs with optional filters\n */\nexport async function listRuns(params?: {\n status?: string; // comma-separated: \"pending,running\"\n agent?: string;\n since?: string; // ISO timestamp\n until?: string; // ISO timestamp\n limit?: number;\n}): Promise<RunsListResponse> {\n const config = await getClientConfig();\n const client = initClient(runsMainContract, config);\n\n const result = await client.list({\n query: {\n status: params?.status,\n agent: params?.agent,\n since: params?.since,\n until: params?.until,\n limit: params?.limit ?? 50,\n },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to list runs\");\n}\n\n/**\n * Get org run queue status\n */\nexport async function getRunQueue(): Promise<QueueResponse> {\n const config = await getClientConfig();\n const client = initClient(runsQueueContract, config);\n\n const result = await client.getQueue({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to get run queue\");\n}\n\n/**\n * Cancel (kill) a run\n */\nexport async function cancelRun(runId: string): Promise<CancelRunResponse> {\n const config = await getClientConfig();\n const client = initClient(runsCancelContract, config);\n\n const result = await client.cancel({\n params: { id: runId },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to cancel run\");\n}\n","import { initClient } from \"@ts-rest/core\";\nimport {\n sessionsByIdContract,\n checkpointsByIdContract,\n type ApiErrorResponse,\n} from \"@vm0/core\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\nimport type { GetSessionResponse, GetCheckpointResponse } from \"../core/types\";\n\n/**\n * Get session by ID\n * Used by run continue to fetch session info including secretNames\n */\nexport async function getSession(\n sessionId: string,\n): Promise<GetSessionResponse> {\n const config = await getClientConfig();\n const client = initClient(sessionsByIdContract, config);\n\n const result = await client.getById({\n params: { id: sessionId },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n const errorBody = result.body as ApiErrorResponse;\n const message = errorBody.error?.message || `Session not found: ${sessionId}`;\n throw new Error(message);\n}\n\n/**\n * Get checkpoint by ID\n * Used by run resume to fetch checkpoint info including secretNames\n */\nexport async function getCheckpoint(\n checkpointId: string,\n): Promise<GetCheckpointResponse> {\n const config = await getClientConfig();\n const client = initClient(checkpointsByIdContract, config);\n\n const result = await client.getById({\n params: { id: checkpointId },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, `Checkpoint not found: ${checkpointId}`);\n}\n","import { initClient } from \"@ts-rest/core\";\nimport {\n storagesPrepareContract,\n storagesCommitContract,\n storagesDownloadContract,\n storagesListContract,\n} from \"@vm0/core\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\n/**\n * Prepare storage for direct S3 upload\n */\nexport async function prepareStorage(body: {\n storageName: string;\n storageType: \"volume\" | \"artifact\" | \"memory\";\n files: Array<{ path: string; hash: string; size: number }>;\n force?: boolean;\n}): Promise<{\n versionId: string;\n existing: boolean;\n uploads?: {\n archive: { key: string; presignedUrl: string };\n manifest: { key: string; presignedUrl: string };\n };\n}> {\n const config = await getClientConfig();\n const client = initClient(storagesPrepareContract, config);\n\n const result = await client.prepare({ body });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to prepare storage\");\n}\n\n/**\n * Commit storage after S3 upload\n */\nexport async function commitStorage(body: {\n storageName: string;\n storageType: \"volume\" | \"artifact\" | \"memory\";\n versionId: string;\n files: Array<{ path: string; hash: string; size: number }>;\n}): Promise<{\n success: true;\n versionId: string;\n storageName: string;\n size: number;\n fileCount: number;\n deduplicated?: boolean;\n}> {\n const config = await getClientConfig();\n const client = initClient(storagesCommitContract, config);\n\n const result = await client.commit({ body });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to commit storage\");\n}\n\n/**\n * Get download URL for storage (volume or artifact)\n */\nexport async function getStorageDownload(query: {\n name: string;\n type: \"volume\" | \"artifact\" | \"memory\";\n version?: string;\n}): Promise<\n | {\n url: string;\n versionId: string;\n fileCount: number;\n size: number;\n }\n | {\n empty: true;\n versionId: string;\n fileCount: 0;\n size: 0;\n }\n> {\n const config = await getClientConfig();\n const client = initClient(storagesDownloadContract, config);\n\n const result = await client.download({\n query: {\n name: query.name,\n type: query.type,\n version: query.version,\n },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, `Storage \"${query.name}\" not found`);\n}\n\n/**\n * List storages (volumes or artifacts)\n */\nexport async function listStorages(query: {\n type: \"volume\" | \"artifact\" | \"memory\";\n}): Promise<\n Array<{\n name: string;\n size: number;\n fileCount: number;\n updatedAt: string;\n }>\n> {\n const config = await getClientConfig();\n const client = initClient(storagesListContract, config);\n\n const result = await client.list({ query });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, `Failed to list ${query.type}s`);\n}\n","import { initClient } from \"@ts-rest/core\";\nimport {\n zeroOrgContract,\n zeroOrgListContract,\n zeroOrgMembersContract,\n zeroOrgInviteContract,\n zeroOrgLeaveContract,\n zeroOrgDeleteContract,\n cliAuthOrgContract,\n type OrgResponse,\n type OrgMembersResponse,\n type OrgListResponse,\n} from \"@vm0/core\";\nimport {\n ApiRequestError,\n getClientConfig,\n getBaseUrl,\n handleError,\n} from \"../core/client-factory\";\nimport { getToken } from \"../config\";\n\n/**\n * Get client config that always uses the user token,\n * not the org token. Used for org list operations.\n */\nasync function getUserTokenClientConfig(): Promise<{\n baseUrl: string;\n baseHeaders: Record<string, string>;\n jsonQuery: false;\n}> {\n const baseUrl = await getBaseUrl();\n const token = await getToken();\n if (!token) {\n throw new ApiRequestError(\"Not authenticated\", \"UNAUTHORIZED\", 401);\n }\n const headers: Record<string, string> = {\n Authorization: `Bearer ${token}`,\n };\n const bypassSecret = process.env.VERCEL_AUTOMATION_BYPASS_SECRET;\n if (bypassSecret) {\n headers[\"x-vercel-protection-bypass\"] = bypassSecret;\n }\n return { baseUrl, baseHeaders: headers, jsonQuery: false };\n}\n\n/**\n * Get current org info via zero API\n */\nexport async function getZeroOrg(): Promise<OrgResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroOrgContract, config);\n\n const result = await client.get({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to get organization\");\n}\n\n/**\n * Update org slug via zero API\n */\nexport async function updateZeroOrg(body: {\n slug: string;\n force?: boolean;\n}): Promise<OrgResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroOrgContract, config);\n\n const result = await client.update({ body });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to update organization\");\n}\n\n/**\n * List all accessible orgs (always uses user token)\n */\nexport async function listZeroOrgs(): Promise<OrgListResponse> {\n const config = await getUserTokenClientConfig();\n const client = initClient(zeroOrgListContract, config);\n\n const result = await client.list({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to list organizations\");\n}\n\n/**\n * Get org members via zero API\n */\nexport async function getZeroOrgMembers(): Promise<OrgMembersResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroOrgMembersContract, config);\n\n const result = await client.members({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to get organization members\");\n}\n\n/**\n * Invite a member to the org via zero API\n */\nexport async function inviteZeroOrgMember(email: string): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroOrgInviteContract, config);\n\n const result = await client.invite({\n body: { email },\n });\n\n if (result.status === 200) {\n return;\n }\n\n handleError(result, \"Failed to invite member\");\n}\n\n/**\n * Remove a member from the org via zero API\n */\nexport async function removeZeroOrgMember(email: string): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroOrgMembersContract, config);\n\n const result = await client.removeMember({\n body: { email },\n });\n\n if (result.status === 200) {\n return;\n }\n\n handleError(result, \"Failed to remove member\");\n}\n\n/**\n * Leave the current org via zero API\n */\nexport async function leaveZeroOrg(): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroOrgLeaveContract, config);\n\n const result = await client.leave({\n body: {},\n });\n\n if (result.status === 200) {\n return;\n }\n\n handleError(result, \"Failed to leave organization\");\n}\n\n/**\n * Delete the current org via zero API\n */\nexport async function deleteZeroOrg(slug: string): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroOrgDeleteContract, config);\n\n const result = await client.delete({\n body: { slug },\n });\n\n if (result.status === 200) {\n return;\n }\n\n handleError(result, \"Failed to delete organization\");\n}\n\n/**\n * Switch active organization and get a new CLI JWT token.\n * Uses the user's current token for auth (not org-scoped).\n */\nexport async function switchZeroOrg(\n slug: string,\n): Promise<{ access_token: string; org_slug: string }> {\n const config = await getUserTokenClientConfig();\n const client = initClient(cliAuthOrgContract, config);\n\n const result = await client.switchOrg({\n headers: {},\n body: { slug },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to switch organization\");\n}\n","import { initClient } from \"@ts-rest/core\";\nimport { zeroSecretsContract, zeroSecretsByNameContract } from \"@vm0/core\";\nimport type { SecretResponse, SecretListResponse } from \"@vm0/core\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\n/**\n * List org-level secrets via zero API (metadata only, no values)\n */\nexport async function listZeroOrgSecrets(): Promise<SecretListResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroSecretsContract, config);\n\n const result = await client.list({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to list org secrets\");\n}\n\n/**\n * Set (create or update) an org-level secret via zero API\n */\nexport async function setZeroOrgSecret(body: {\n name: string;\n value: string;\n description?: string;\n}): Promise<SecretResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroSecretsContract, config);\n\n const result = await client.set({ body });\n\n if (result.status === 200 || result.status === 201) {\n return result.body;\n }\n\n handleError(result, \"Failed to set org secret\");\n}\n\n/**\n * Delete an org-level secret by name via zero API\n */\nexport async function deleteZeroOrgSecret(name: string): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroSecretsByNameContract, config);\n\n const result = await client.delete({\n params: { name },\n });\n\n if (result.status === 204) {\n return;\n }\n\n handleError(result, `Org secret \"${name}\" not found`);\n}\n","import { initClient } from \"@ts-rest/core\";\nimport { zeroVariablesContract, zeroVariablesByNameContract } from \"@vm0/core\";\nimport type { VariableResponse, VariableListResponse } from \"@vm0/core\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\n/**\n * List org-level variables via zero API (includes values)\n */\nexport async function listZeroOrgVariables(): Promise<VariableListResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroVariablesContract, config);\n\n const result = await client.list({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to list org variables\");\n}\n\n/**\n * Set (create or update) an org-level variable via zero API\n */\nexport async function setZeroOrgVariable(body: {\n name: string;\n value: string;\n description?: string;\n}): Promise<VariableResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroVariablesContract, config);\n\n const result = await client.set({ body });\n\n if (result.status === 200 || result.status === 201) {\n return result.body;\n }\n\n handleError(result, \"Failed to set org variable\");\n}\n\n/**\n * Delete an org-level variable by name via zero API\n */\nexport async function deleteZeroOrgVariable(name: string): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroVariablesByNameContract, config);\n\n const result = await client.delete({\n params: { name },\n });\n\n if (result.status === 204) {\n return;\n }\n\n handleError(result, `Org variable \"${name}\" not found`);\n}\n","import { initClient } from \"@ts-rest/core\";\nimport {\n zeroModelProvidersMainContract,\n zeroModelProvidersByTypeContract,\n zeroModelProvidersDefaultContract,\n zeroModelProvidersUpdateModelContract,\n type ModelProviderType,\n type ModelProviderListResponse,\n type ModelProviderResponse,\n type UpsertModelProviderResponse,\n} from \"@vm0/core\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\n/**\n * List all org-level model providers via zero API\n */\nexport async function listZeroOrgModelProviders(): Promise<ModelProviderListResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroModelProvidersMainContract, config);\n\n const result = await client.list({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to list org model providers\");\n}\n\n/**\n * Create or update an org-level model provider via zero API (admin only)\n */\nexport async function upsertZeroOrgModelProvider(body: {\n type: ModelProviderType;\n secret?: string;\n authMethod?: string;\n secrets?: Record<string, string>;\n selectedModel?: string;\n}): Promise<UpsertModelProviderResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroModelProvidersMainContract, config);\n\n const result = await client.upsert({ body });\n\n if (result.status === 200 || result.status === 201) {\n return result.body;\n }\n\n handleError(result, \"Failed to set org model provider\");\n}\n\n/**\n * Delete an org-level model provider via zero API (admin only)\n */\nexport async function deleteZeroOrgModelProvider(\n type: ModelProviderType,\n): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroModelProvidersByTypeContract, config);\n\n const result = await client.delete({\n params: { type },\n });\n\n if (result.status === 204) {\n return;\n }\n\n handleError(result, `Org model provider \"${type}\" not found`);\n}\n\n/**\n * Set an org-level model provider as default for its framework via zero API (admin only)\n */\nexport async function setZeroOrgModelProviderDefault(\n type: ModelProviderType,\n): Promise<ModelProviderResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroModelProvidersDefaultContract, config);\n\n const result = await client.setDefault({\n params: { type },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to set default org model provider\");\n}\n\n/**\n * Update model selection for an existing org-level provider via zero API (admin only)\n */\nexport async function updateZeroOrgModelProviderModel(\n type: ModelProviderType,\n selectedModel?: string,\n): Promise<ModelProviderResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroModelProvidersUpdateModelContract, config);\n\n const result = await client.updateModel({\n params: { type },\n body: { selectedModel },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to update org model provider\");\n}\n","import { initClient } from \"@ts-rest/core\";\nimport {\n zeroAgentsMainContract,\n zeroAgentsByIdContract,\n zeroAgentInstructionsContract,\n zeroUserConnectorsContract,\n type ZeroAgentResponse,\n type ZeroAgentRequest,\n type ZeroAgentInstructionsResponse,\n} from \"@vm0/core\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\nexport async function createZeroAgent(\n body: ZeroAgentRequest,\n): Promise<ZeroAgentResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroAgentsMainContract, config);\n const result = await client.create({ body });\n if (result.status === 201) return result.body;\n handleError(result, \"Failed to create zero agent\");\n}\n\nexport async function listZeroAgents(): Promise<ZeroAgentResponse[]> {\n const config = await getClientConfig();\n const client = initClient(zeroAgentsMainContract, config);\n const result = await client.list({ headers: {} });\n if (result.status === 200) return result.body;\n handleError(result, \"Failed to list zero agents\");\n}\n\nexport async function getZeroAgent(id: string): Promise<ZeroAgentResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroAgentsByIdContract, config);\n const result = await client.get({ params: { id } });\n if (result.status === 200) return result.body;\n handleError(result, `Zero agent \"${id}\" not found`);\n}\n\nexport async function updateZeroAgent(\n id: string,\n body: ZeroAgentRequest,\n): Promise<ZeroAgentResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroAgentsByIdContract, config);\n const result = await client.update({ params: { id }, body });\n if (result.status === 200) return result.body;\n handleError(result, `Failed to update zero agent \"${id}\"`);\n}\n\nexport async function deleteZeroAgent(id: string): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroAgentsByIdContract, config);\n const result = await client.delete({ params: { id } });\n if (result.status === 204) return;\n handleError(result, `Zero agent \"${id}\" not found`);\n}\n\nexport async function getZeroAgentInstructions(\n id: string,\n): Promise<ZeroAgentInstructionsResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroAgentInstructionsContract, config);\n const result = await client.get({ params: { id } });\n if (result.status === 200) return result.body;\n handleError(result, `Failed to get instructions for zero agent \"${id}\"`);\n}\n\nexport async function getZeroAgentUserConnectors(\n id: string,\n): Promise<string[]> {\n const config = await getClientConfig();\n const client = initClient(zeroUserConnectorsContract, config);\n const result = await client.get({ params: { id } });\n if (result.status === 200) return result.body.enabledTypes;\n handleError(\n result,\n `Failed to get connector permissions for zero agent \"${id}\"`,\n );\n}\n\nexport async function updateZeroAgentInstructions(\n id: string,\n content: string,\n): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroAgentInstructionsContract, config);\n const result = await client.update({\n params: { id },\n body: { content },\n });\n if (result.status === 200) return;\n handleError(result, `Failed to update instructions for zero agent \"${id}\"`);\n}\n","import { initClient } from \"@ts-rest/core\";\nimport {\n zeroSkillsCollectionContract,\n zeroSkillsDetailContract,\n type ZeroAgentCustomSkill,\n type ZeroAgentSkillContentResponse,\n} from \"@vm0/core\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\nexport async function listSkills(): Promise<ZeroAgentCustomSkill[]> {\n const config = await getClientConfig();\n const client = initClient(zeroSkillsCollectionContract, config);\n const result = await client.list();\n if (result.status === 200) return result.body;\n handleError(result, \"Failed to list skills\");\n}\n\nexport async function createSkill(body: {\n name: string;\n content: string;\n displayName?: string;\n description?: string;\n}): Promise<ZeroAgentCustomSkill> {\n const config = await getClientConfig();\n const client = initClient(zeroSkillsCollectionContract, config);\n const result = await client.create({ body });\n if (result.status === 201) return result.body;\n handleError(result, `Failed to create skill \"${body.name}\"`);\n}\n\nexport async function getSkill(\n name: string,\n): Promise<ZeroAgentSkillContentResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroSkillsDetailContract, config);\n const result = await client.get({ params: { name } });\n if (result.status === 200) return result.body;\n handleError(result, `Skill \"${name}\" not found`);\n}\n\nexport async function updateSkill(\n name: string,\n body: { content: string },\n): Promise<ZeroAgentSkillContentResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroSkillsDetailContract, config);\n const result = await client.update({ params: { name }, body });\n if (result.status === 200) return result.body;\n handleError(result, `Failed to update skill \"${name}\"`);\n}\n\nexport async function deleteSkill(name: string): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroSkillsDetailContract, config);\n const result = await client.delete({ params: { name } });\n if (result.status === 204) return;\n handleError(result, `Skill \"${name}\" not found`);\n}\n","import { initClient } from \"@ts-rest/core\";\nimport {\n integrationsSlackMessageContract,\n type SendSlackMessageBody,\n type SendSlackMessageResponse,\n} from \"@vm0/core\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\nexport async function sendSlackMessage(\n body: SendSlackMessageBody,\n): Promise<SendSlackMessageResponse> {\n const config = await getClientConfig();\n const client = initClient(integrationsSlackMessageContract, config);\n\n const result = await client.sendMessage({ body, headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to send Slack message\");\n}\n","import { initClient } from \"@ts-rest/core\";\nimport {\n zeroSchedulesMainContract,\n zeroSchedulesByNameContract,\n zeroSchedulesEnableContract,\n} from \"@vm0/core\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\nimport type {\n ScheduleResponse,\n ScheduleListResponse,\n DeployScheduleResponse,\n} from \"@vm0/core\";\nimport { resolveCompose } from \"./composes\";\n\n/**\n * Deploy zero schedule (create or update)\n */\nexport async function deployZeroSchedule(body: {\n name: string;\n agentId: string;\n cronExpression?: string;\n atTime?: string;\n intervalSeconds?: number;\n timezone?: string;\n prompt: string;\n description?: string;\n appendSystemPrompt?: string;\n volumeVersions?: Record<string, string>;\n enabled?: boolean;\n notifyEmail?: boolean;\n notifySlack?: boolean;\n notifySlackChannelId?: string | null;\n}): Promise<DeployScheduleResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroSchedulesMainContract, config);\n\n const result = await client.deploy({ body });\n\n if (result.status === 200 || result.status === 201) {\n return result.body;\n }\n\n handleError(result, \"Failed to deploy schedule\");\n}\n\n/**\n * List all zero schedules\n */\nexport async function listZeroSchedules(): Promise<ScheduleListResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroSchedulesMainContract, config);\n\n const result = await client.list({ headers: {} });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, \"Failed to list schedules\");\n}\n\n/**\n * Delete zero schedule by name\n */\nexport async function deleteZeroSchedule(params: {\n name: string;\n agentId: string;\n}): Promise<void> {\n const config = await getClientConfig();\n const client = initClient(zeroSchedulesByNameContract, config);\n\n const result = await client.delete({\n params: { name: params.name },\n query: { agentId: params.agentId },\n });\n\n if (result.status === 204) {\n return;\n }\n\n handleError(result, `Schedule \"${params.name}\" not found on remote`);\n}\n\n/**\n * Enable zero schedule\n */\nexport async function enableZeroSchedule(params: {\n name: string;\n agentId: string;\n}): Promise<ScheduleResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroSchedulesEnableContract, config);\n\n const result = await client.enable({\n params: { name: params.name },\n body: { agentId: params.agentId },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, `Failed to enable schedule \"${params.name}\"`);\n}\n\n/**\n * Disable zero schedule\n */\nexport async function disableZeroSchedule(params: {\n name: string;\n agentId: string;\n}): Promise<ScheduleResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroSchedulesEnableContract, config);\n\n const result = await client.disable({\n params: { name: params.name },\n body: { agentId: params.agentId },\n });\n\n if (result.status === 200) {\n return result.body;\n }\n\n handleError(result, `Failed to disable schedule \"${params.name}\"`);\n}\n\n/**\n * Resolve a zero schedule by agent identifier (UUID or name) using the list API.\n * Searches across all user's schedules and finds by agentId.\n *\n * Returns the full ScheduleResponse so callers can access any field.\n * When an agent has multiple schedules, scheduleName is required for disambiguation.\n * When an agent has exactly one schedule, scheduleName is optional.\n *\n * @throws Error if agent has no schedule or disambiguation is needed\n */\nexport async function resolveZeroScheduleByAgent(\n agentIdentifier: string,\n scheduleName?: string,\n): Promise<ScheduleResponse> {\n const compose = await resolveCompose(agentIdentifier);\n if (!compose) {\n throw new Error(`Agent not found: ${agentIdentifier}`);\n }\n\n const { schedules } = await listZeroSchedules();\n\n const agentSchedules = schedules.filter((s) => {\n return s.agentId === compose.id;\n });\n\n if (agentSchedules.length === 0) {\n throw new Error(`No schedule found for agent \"${agentIdentifier}\"`);\n }\n\n if (scheduleName) {\n const match = agentSchedules.find((s) => {\n return s.name === scheduleName;\n });\n if (!match) {\n const available = agentSchedules\n .map((s) => {\n return s.name;\n })\n .join(\", \");\n throw new Error(\n `Schedule \"${scheduleName}\" not found for agent \"${agentIdentifier}\". Available schedules: ${available}`,\n );\n }\n return match;\n }\n\n if (agentSchedules.length === 1) {\n return agentSchedules[0]!;\n }\n\n const available = agentSchedules\n .map((s) => {\n return s.name;\n })\n .join(\", \");\n throw new Error(\n `Agent \"${agentIdentifier}\" has multiple schedules. Use --name to specify which one: ${available}`,\n );\n}\n","import { initClient } from \"@ts-rest/core\";\nimport {\n zeroRunsMainContract,\n zeroRunsByIdContract,\n zeroRunAgentEventsContract,\n type CreateRunResponse,\n type GetRunResponse,\n type AgentEventsResponse,\n} from \"@vm0/core\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\nexport async function createZeroRun(body: {\n agentId?: string;\n sessionId?: string;\n checkpointId?: string;\n prompt: string;\n appendSystemPrompt?: string;\n modelProvider?: string;\n tools?: string[];\n settings?: string;\n checkEnv?: boolean;\n}): Promise<CreateRunResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroRunsMainContract, config);\n const result = await client.create({ body });\n if (result.status === 201) return result.body;\n handleError(result, \"Failed to create zero run\");\n}\n\nexport async function getZeroRun(id: string): Promise<GetRunResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroRunsByIdContract, config);\n const result = await client.getById({ params: { id } });\n if (result.status === 200) return result.body;\n handleError(result, `Failed to get zero run \"${id}\"`);\n}\n\nexport async function getZeroRunAgentEvents(\n id: string,\n options?: { since?: number; limit?: number; order?: \"asc\" | \"desc\" },\n): Promise<AgentEventsResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroRunAgentEventsContract, config);\n const result = await client.getAgentEvents({\n params: { id },\n query: {\n since: options?.since,\n limit: options?.limit ?? 100,\n order: options?.order ?? \"asc\",\n },\n });\n if (result.status === 200) return result.body;\n handleError(result, `Failed to get zero run events for \"${id}\"`);\n}\n","import { initClient } from \"@ts-rest/core\";\nimport {\n zeroAskUserQuestionContract,\n zeroAskUserAnswerContract,\n type AskUserQuestionBody,\n type AskUserQuestionResponse,\n type AskUserAnswerResponse,\n} from \"@vm0/core\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\nexport async function postAskUserQuestion(\n body: AskUserQuestionBody,\n): Promise<AskUserQuestionResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroAskUserQuestionContract, config);\n const result = await client.postQuestion({ body, headers: {} });\n if (result.status === 200) return result.body;\n handleError(result, \"Failed to post question\");\n}\n\nexport async function getAskUserAnswer(\n pendingId: string,\n): Promise<AskUserAnswerResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroAskUserAnswerContract, config);\n const result = await client.getAnswer({\n query: { pendingId },\n headers: {},\n });\n if (result.status === 200) return result.body;\n handleError(result, \"Failed to get answer\");\n}\n","import prompts from \"prompts\";\n\n/**\n * Check if the current environment supports interactive prompts\n * Returns true if stdout is a TTY (interactive terminal)\n */\nexport function isInteractive(): boolean {\n return process.stdout.isTTY === true;\n}\n\n/**\n * Prompt for text input with optional default value\n * @param message - The prompt message\n * @param initial - Optional default value\n * @param validate - Optional validation function\n * @returns The user's input, or undefined if cancelled or non-interactive\n */\nexport async function promptText(\n message: string,\n initial?: string,\n validate?: (value: string) => boolean | string,\n): Promise<string | undefined> {\n // In non-interactive mode, return undefined immediately\n if (!isInteractive()) {\n return undefined;\n }\n\n const response = await prompts(\n {\n type: \"text\",\n name: \"value\",\n message,\n initial,\n validate,\n },\n {\n onCancel: () => {\n // Return undefined on Ctrl+C\n return false;\n },\n },\n );\n\n return response.value;\n}\n\n/**\n * Prompt for yes/no confirmation\n * @param message - The prompt message\n * @param initial - Default value (true = yes, false = no)\n * @returns true if confirmed, false if declined, undefined if cancelled or non-interactive\n */\nexport async function promptConfirm(\n message: string,\n initial = true,\n): Promise<boolean | undefined> {\n // In non-interactive mode, return undefined immediately\n if (!isInteractive()) {\n return undefined;\n }\n\n const response = await prompts(\n {\n type: \"confirm\",\n name: \"value\",\n message,\n initial,\n },\n {\n onCancel: () => {\n return false;\n },\n },\n );\n\n return response.value;\n}\n\n/**\n * Choice option for select prompts\n */\ninterface SelectChoice<T> {\n title: string;\n value: T;\n description?: string;\n}\n\n/**\n * Prompt for selecting from a list of options\n * @param message - The prompt message\n * @param choices - Array of choices with title, value, and optional description\n * @param initial - Index of the default selection (0-based)\n * @returns The selected value, or undefined if cancelled or non-interactive\n */\nexport async function promptSelect<T>(\n message: string,\n choices: SelectChoice<T>[],\n initial?: number,\n): Promise<T | undefined> {\n // In non-interactive mode, return undefined immediately\n if (!isInteractive()) {\n return undefined;\n }\n\n const response = await prompts(\n {\n type: \"select\",\n name: \"value\",\n message,\n choices,\n initial,\n },\n {\n onCancel: () => {\n return false;\n },\n },\n );\n\n return response.value;\n}\n\n/**\n * Prompt for password/secret input (masked)\n * @param message - The prompt message\n * @returns The user's input, or undefined if cancelled or non-interactive\n */\nexport async function promptPassword(\n message: string,\n): Promise<string | undefined> {\n // In non-interactive mode, return undefined immediately\n if (!isInteractive()) {\n return undefined;\n }\n\n const response = await prompts(\n {\n type: \"password\",\n name: \"value\",\n message,\n },\n {\n onCancel: () => {\n return false;\n },\n },\n );\n\n return response.value;\n}\n","/**\n * Event parser for Claude Code JSONL events\n * Converts raw JSONL events into simplified, user-friendly format\n *\n * Note: VM0 lifecycle events (vm0_start, vm0_result, vm0_error) are no longer\n * sent as events. Instead, run state is returned in the events API response.\n */\n\nexport interface ParsedEvent {\n type: \"init\" | \"text\" | \"tool_use\" | \"tool_result\" | \"result\";\n timestamp: Date;\n data: Record<string, unknown>;\n}\n\ninterface SystemEvent {\n type: \"system\";\n subtype: string;\n cwd?: string;\n session_id: string;\n tools: string[];\n model: string;\n}\n\ninterface AssistantEvent {\n type: \"assistant\";\n message: {\n role: \"assistant\";\n content: Array<{\n type: string;\n text?: string;\n id?: string;\n name?: string;\n input?: Record<string, unknown>;\n }>;\n usage?: Record<string, unknown>;\n };\n session_id: string;\n}\n\ninterface UserEvent {\n type: \"user\";\n message: {\n role: \"user\";\n content: Array<{\n type: string;\n tool_use_id?: string;\n content?: string;\n is_error?: boolean;\n }>;\n };\n session_id: string;\n}\n\ninterface ResultEvent {\n type: \"result\";\n subtype: string;\n is_error: boolean;\n duration_ms: number;\n num_turns: number;\n result: string;\n session_id: string;\n total_cost_usd: number;\n usage: Record<string, unknown>;\n}\n\ntype RawEvent =\n | SystemEvent\n | AssistantEvent\n | UserEvent\n | ResultEvent\n | Record<string, unknown>;\n\nexport class ClaudeEventParser {\n /**\n * Parse a raw Claude Code JSONL event into a simplified format\n * Returns null if the event type is unknown or malformed\n */\n static parse(rawEvent: RawEvent): ParsedEvent | null {\n if (!rawEvent || typeof rawEvent !== \"object\" || !(\"type\" in rawEvent)) {\n return null;\n }\n\n switch (rawEvent.type) {\n case \"system\":\n return this.parseSystemEvent(rawEvent as SystemEvent);\n\n case \"assistant\":\n return this.parseAssistantMessage(rawEvent as AssistantEvent);\n\n case \"user\":\n return this.parseUserMessage(rawEvent as UserEvent);\n\n case \"result\":\n return this.parseResultEvent(rawEvent as ResultEvent);\n\n default:\n return null;\n }\n }\n\n private static parseSystemEvent(event: SystemEvent): ParsedEvent | null {\n if (event.subtype !== \"init\") {\n return null;\n }\n\n return {\n type: \"init\",\n timestamp: new Date(),\n data: {\n framework: \"claude-code\",\n sessionId: event.session_id,\n model: event.model,\n tools: event.tools,\n ...(event.cwd && { cwd: event.cwd }),\n },\n };\n }\n\n private static parseAssistantMessage(\n event: AssistantEvent,\n ): ParsedEvent | null {\n if (!event.message?.content || event.message.content.length === 0) {\n return null;\n }\n\n const content = event.message.content[0];\n\n if (!content) {\n return null;\n }\n\n if (content.type === \"text\") {\n return {\n type: \"text\",\n timestamp: new Date(),\n data: { text: content.text },\n };\n }\n\n if (content.type === \"tool_use\") {\n return {\n type: \"tool_use\",\n timestamp: new Date(),\n data: {\n tool: content.name,\n toolUseId: content.id,\n input: content.input || {},\n },\n };\n }\n\n return null;\n }\n\n private static parseUserMessage(event: UserEvent): ParsedEvent | null {\n if (!event.message?.content || event.message.content.length === 0) {\n return null;\n }\n\n const content = event.message.content[0];\n\n if (!content) {\n return null;\n }\n\n if (content.type === \"tool_result\") {\n return {\n type: \"tool_result\",\n timestamp: new Date(),\n data: {\n toolUseId: content.tool_use_id,\n result: content.content,\n isError: content.is_error || false,\n },\n };\n }\n\n return null;\n }\n\n private static parseResultEvent(event: ResultEvent): ParsedEvent | null {\n return {\n type: \"result\",\n timestamp: new Date(),\n data: {\n success: !event.is_error,\n result: event.result,\n durationMs: event.duration_ms,\n numTurns: event.num_turns,\n cost: event.total_cost_usd,\n usage: event.usage,\n },\n };\n }\n}\n","/**\n * Event renderer for CLI output\n * Renders parsed events with colors and formatting\n *\n * Run lifecycle is rendered via:\n * - renderRunStarted: Called immediately after run is created\n * - renderRunCompleted: Called when run completes successfully\n * - renderRunFailed: Called when run fails\n */\n\nimport chalk from \"chalk\";\nimport type { ParsedEvent } from \"./claude-event-parser\";\nimport type { RunResult } from \"../api\";\nimport { getFrameworkDisplayName, isSupportedFramework } from \"@vm0/core\";\nimport {\n formatToolHeader,\n formatToolResult,\n type ToolUseData,\n type ToolResultData,\n} from \"./tool-formatters\";\n\n/**\n * Info about a started run\n */\ninterface RunStartedInfo {\n runId: string;\n sandboxId?: string;\n}\n\n/**\n * Options for creating an EventRenderer instance\n */\ninterface EventRendererOptions {\n /** Whether to show timestamp prefix (useful for historical log viewing) */\n showTimestamp?: boolean;\n /** Whether to show verbose output (full tool inputs/outputs) */\n verbose?: boolean;\n /** Whether to buffer tool_use events and wait for tool_result (default: true for streaming) */\n buffered?: boolean;\n}\n\n/**\n * Stateful event renderer that buffers tool_use events\n * and displays them grouped with their tool_result\n */\nexport class EventRenderer {\n private pendingToolUse = new Map<\n string,\n { toolUse: ToolUseData; prefix: string }\n >();\n private options: EventRendererOptions;\n private lastEventType: string | null = null;\n private frameworkDisplayName: string = \"Agent\";\n\n constructor(options?: EventRendererOptions) {\n this.options = options ?? {};\n }\n\n /**\n * Render run started info\n * Called immediately after run is created, before polling events\n */\n static renderRunStarted(info: RunStartedInfo): void {\n console.log(chalk.bold(\"▶ Run started\"));\n console.log(` Run ID: ${chalk.dim(info.runId)}`);\n if (info.sandboxId) {\n console.log(` Sandbox: ${chalk.dim(info.sandboxId)}`);\n }\n console.log(chalk.dim(` (use \"vm0 logs ${info.runId}\" to view logs)`));\n console.log();\n }\n\n /**\n * Format timestamp for display (without milliseconds, matching metrics format)\n */\n static formatTimestamp(timestamp: Date): string {\n return timestamp.toISOString().replace(/\\.\\d{3}Z$/, \"Z\");\n }\n\n /**\n * Render a parsed event to console\n */\n render(event: ParsedEvent): void {\n const timestampPrefix = this.options.showTimestamp\n ? `[${EventRenderer.formatTimestamp(event.timestamp)}] `\n : \"\";\n\n switch (event.type) {\n case \"init\":\n this.renderInit(event, timestampPrefix);\n break;\n case \"text\":\n this.renderText(event, timestampPrefix);\n break;\n case \"tool_use\":\n this.handleToolUse(event, timestampPrefix);\n break;\n case \"tool_result\":\n this.handleToolResult(event, timestampPrefix);\n break;\n case \"result\":\n this.renderResult(event, timestampPrefix);\n break;\n }\n }\n\n /**\n * Render run completed state\n * Note: This is run lifecycle status, not an event\n */\n static renderRunCompleted(result: RunResult | undefined): void {\n // Visual separator to distinguish from event stream\n console.log(\"\");\n console.log(chalk.green(\"✓ Run completed successfully\"));\n\n if (result) {\n console.log(` Checkpoint: ${chalk.dim(result.checkpointId)}`);\n console.log(` Session: ${chalk.dim(result.agentSessionId)}`);\n console.log(` Conversation: ${chalk.dim(result.conversationId)}`);\n\n // Render artifact and volumes\n if (result.artifact && Object.keys(result.artifact).length > 0) {\n console.log(` Artifact:`);\n for (const [name, version] of Object.entries(result.artifact)) {\n console.log(\n ` ${name}: ${chalk.dim(EventRenderer.formatVersion(version))}`,\n );\n }\n }\n\n if (result.volumes && Object.keys(result.volumes).length > 0) {\n console.log(` Volumes:`);\n for (const [name, version] of Object.entries(result.volumes)) {\n console.log(\n ` ${name}: ${chalk.dim(EventRenderer.formatVersion(version))}`,\n );\n }\n }\n }\n }\n\n /**\n * Render run failed state\n * Note: This is run lifecycle status, not an event\n */\n static renderRunFailed(error: string | undefined, runId: string): void {\n // Visual separator to distinguish from event stream\n console.error(\"\");\n console.error(chalk.red(\"✗ Run failed\"));\n console.error(` Error: ${chalk.red(error || \"Unknown error\")}`);\n console.error(\n chalk.dim(` (use \"vm0 logs ${runId} --system\" to view system logs)`),\n );\n }\n\n /**\n * Handle tool_use event - buffer it for later grouping with result (when buffered)\n * or render immediately (when not buffered, e.g., historical log viewing)\n */\n private handleToolUse(event: ParsedEvent, prefix: string): void {\n const toolUseId = String(event.data.toolUseId || \"\");\n const tool = String(event.data.tool || \"\");\n const input = (event.data.input as Record<string, unknown>) || {};\n const toolUseData: ToolUseData = { tool, input };\n\n // When buffered (default), store for later grouping\n // When not buffered, render immediately\n if (this.options.buffered !== false) {\n this.pendingToolUse.set(toolUseId, { toolUse: toolUseData, prefix });\n } else {\n // Non-buffered: render tool_use header immediately\n this.renderToolUseOnly(toolUseData, prefix);\n }\n }\n\n /**\n * Render a tool_use event without waiting for result (for historical log viewing)\n */\n private renderToolUseOnly(toolUse: ToolUseData, prefix: string): void {\n // Add spacing before tool if previous was text\n if (this.lastEventType === \"text\") {\n console.log();\n }\n\n const cont = this.getContinuationPrefix();\n const headerLines = formatToolHeader(toolUse);\n\n // First line gets the bullet, rest get simple indent\n for (let i = 0; i < headerLines.length; i++) {\n if (i === 0) {\n console.log(prefix + \"● \" + headerLines[i]);\n } else {\n console.log(cont + headerLines[i]);\n }\n }\n console.log(); // Empty line after each tool_use\n this.lastEventType = \"tool\";\n }\n\n /**\n * Handle tool_result event - lookup buffered tool_use and render grouped\n */\n private handleToolResult(event: ParsedEvent, prefix: string): void {\n const toolUseId = String(event.data.toolUseId || \"\");\n const result = String(event.data.result || \"\");\n const isError = Boolean(event.data.isError);\n\n const pending = this.pendingToolUse.get(toolUseId);\n\n if (pending) {\n // Render grouped output\n this.renderGroupedTool(pending.toolUse, { result, isError }, prefix);\n this.pendingToolUse.delete(toolUseId);\n }\n // Skip orphan tool_results (no matching tool_use in buffer)\n }\n\n /**\n * Get continuation prefix (simple indent, no timestamp alignment)\n */\n private getContinuationPrefix(): string {\n return \" \";\n }\n\n /**\n * Render grouped tool output (tool_use + tool_result together)\n */\n private renderGroupedTool(\n toolUse: ToolUseData,\n result: ToolResultData,\n prefix: string,\n ): void {\n // Add spacing before tool if previous was text\n if (this.lastEventType === \"text\") {\n console.log();\n }\n\n const verbose = this.options.verbose ?? false;\n const cont = this.getContinuationPrefix();\n\n const headerLines = formatToolHeader(toolUse);\n const resultLines = formatToolResult(toolUse, result, verbose);\n\n // First line gets timestamp + bullet, rest get simple indent\n for (let i = 0; i < headerLines.length; i++) {\n if (i === 0) {\n console.log(prefix + \"● \" + headerLines[i]);\n } else {\n console.log(cont + headerLines[i]);\n }\n }\n for (const line of resultLines) {\n console.log(cont + line);\n }\n console.log(); // Empty line after each group\n this.lastEventType = \"tool\";\n }\n\n private renderInit(event: ParsedEvent, prefix: string): void {\n const frameworkStr = String(event.data.framework || \"claude-code\");\n const displayName = isSupportedFramework(frameworkStr)\n ? getFrameworkDisplayName(frameworkStr)\n : frameworkStr;\n this.frameworkDisplayName = displayName;\n console.log(prefix + chalk.bold(`▷ ${displayName} Started`));\n console.log(` Session: ${chalk.dim(String(event.data.sessionId || \"\"))}`);\n if (event.data.model) {\n console.log(` Model: ${chalk.dim(String(event.data.model))}`);\n }\n console.log(\n ` Tools: ${chalk.dim(\n Array.isArray(event.data.tools)\n ? event.data.tools.join(\", \")\n : String(event.data.tools || \"\"),\n )}`,\n );\n console.log();\n this.lastEventType = \"init\";\n }\n\n private renderText(event: ParsedEvent, prefix: string): void {\n const text = String(event.data.text || \"\");\n // Text events get a bullet prefix\n console.log(prefix + \"● \" + text);\n this.lastEventType = \"text\";\n }\n\n private renderResult(event: ParsedEvent, prefix: string): void {\n console.log(); // Spacing before result\n const success = Boolean(event.data.success);\n\n if (success) {\n console.log(\n prefix + chalk.bold(`◆ ${this.frameworkDisplayName} Completed`),\n );\n } else {\n console.log(prefix + chalk.bold(`◆ ${this.frameworkDisplayName} Failed`));\n }\n\n const durationMs = Number(event.data.durationMs || 0);\n const durationSec = (durationMs / 1000).toFixed(1);\n console.log(` Duration: ${chalk.dim(durationSec + \"s\")}`);\n\n const numTurns = Number(event.data.numTurns || 0);\n console.log(` Turns: ${chalk.dim(String(numTurns))}`);\n\n const usage = event.data.usage as Record<string, unknown>;\n if (usage && typeof usage === \"object\") {\n const inputTokens = Number(usage.input_tokens || 0);\n const outputTokens = Number(usage.output_tokens || 0);\n\n const formatTokens = (count: number): string => {\n if (count >= 1000) {\n return Math.floor(count / 1000) + \"k\";\n }\n return String(count);\n };\n\n console.log(\n ` Tokens: ${chalk.dim(\n `input=${formatTokens(inputTokens)} output=${formatTokens(outputTokens)}`,\n )}`,\n );\n }\n this.lastEventType = \"result\";\n }\n\n /**\n * Format version ID for display (show short 8-character prefix)\n */\n private static formatVersion(version: string): string {\n // SHA-256 hashes are 64 characters, show first 8\n if (version.length === 64 && /^[a-f0-9]+$/i.test(version)) {\n return version.slice(0, 8);\n }\n // For \"latest\" or other formats, show as-is\n return version;\n }\n}\n","/**\n * Tool-specific formatters for CLI output\n * Formats tool_use and tool_result events in grouped output\n */\n\nimport chalk from \"chalk\";\n\nexport interface ToolUseData {\n tool: string;\n input: Record<string, unknown>;\n}\n\nexport interface ToolResultData {\n result: string;\n isError: boolean;\n}\n\n/**\n * Pluralize a word based on count\n */\nfunction pluralize(count: number, singular: string, plural: string): string {\n return count === 1 ? singular : plural;\n}\n\n/**\n * Truncate text with ellipsis\n */\nfunction truncate(text: string, maxLength: number): string {\n if (text.length <= maxLength) return text;\n return text.slice(0, maxLength - 3) + \"...\";\n}\n\n/**\n * Format the header line for a tool (e.g., \"Read src/lib/api.ts\")\n */\nexport function formatToolHeader(data: ToolUseData): string[] {\n const { tool, input } = data;\n\n // Get the headline based on tool type\n const headline = getToolHeadline(tool, input);\n return [headline];\n}\n\n/**\n * Tool headline formatters - maps tool name to headline generator\n */\nconst toolHeadlineFormatters: Record<\n string,\n (input: Record<string, unknown>) => string\n> = {\n Read: (input) => {\n return `Read${chalk.dim(`(${String(input.file_path || \"\")})`)}`;\n },\n Edit: (input) => {\n return `Edit${chalk.dim(`(${String(input.file_path || \"\")})`)}`;\n },\n Write: (input) => {\n return `Write${chalk.dim(`(${String(input.file_path || \"\")})`)}`;\n },\n Bash: (input) => {\n return `Bash${chalk.dim(`(${truncate(String(input.command || \"\"), 60)})`)}`;\n },\n Glob: (input) => {\n return `Glob${chalk.dim(`(${String(input.pattern || \"\")})`)}`;\n },\n Grep: (input) => {\n return `Grep${chalk.dim(`(${String(input.pattern || \"\")})`)}`;\n },\n Task: (input) => {\n return `Task${chalk.dim(`(${truncate(String(input.description || \"\"), 60)})`)}`;\n },\n WebFetch: (input) => {\n return `WebFetch${chalk.dim(`(${truncate(String(input.url || \"\"), 60)})`)}`;\n },\n WebSearch: (input) => {\n return `WebSearch${chalk.dim(`(${truncate(String(input.query || \"\"), 60)})`)}`;\n },\n TodoWrite: () => {\n return \"TodoWrite\";\n },\n};\n\n/**\n * Get the headline for a tool based on its type and input\n */\nfunction getToolHeadline(tool: string, input: Record<string, unknown>): string {\n const formatter = toolHeadlineFormatters[tool];\n return formatter ? formatter(input) : tool;\n}\n\n/**\n * Format the result line with content preview\n */\nexport function formatToolResult(\n toolUse: ToolUseData,\n result: ToolResultData,\n verbose: boolean,\n): string[] {\n const { tool, input } = toolUse;\n const { result: resultText, isError } = result;\n const lines: string[] = [];\n\n // Special handling for Read - strip line numbers and filter system content\n if (tool === \"Read\" && !isError && resultText) {\n const readLines = formatReadContent(resultText, verbose);\n lines.push(...readLines);\n return lines;\n }\n\n // Special handling for TodoWrite - show the task list\n if (tool === \"TodoWrite\" && !isError) {\n const todoLines = formatTodoList(input);\n lines.push(...todoLines);\n return lines;\n }\n\n // Special handling for Edit - show diff format\n if (tool === \"Edit\" && !isError) {\n const editLines = formatEditDiff(input, verbose);\n lines.push(...editLines);\n return lines;\n }\n\n // Special handling for Write - show content preview\n if (tool === \"Write\" && !isError) {\n const writeLines = formatWritePreview(input, verbose);\n lines.push(...writeLines);\n return lines;\n }\n\n // Error case: show error message\n if (isError) {\n const errorMsg = resultText ? truncate(resultText, 80) : \"Error\";\n lines.push(`└ ✗ ${chalk.dim(errorMsg)}`);\n return lines;\n }\n\n // Success case: show content preview\n if (resultText) {\n const resultLines = resultText.split(\"\\n\");\n if (verbose) {\n // In verbose mode, show full result with └ on first line\n for (let i = 0; i < resultLines.length; i++) {\n const prefix = i === 0 ? \"└ \" : \" \";\n lines.push(`${prefix}${chalk.dim(resultLines[i])}`);\n }\n } else if (resultLines.length > 0) {\n // In normal mode, show first 3 lines with expand hint\n const previewCount = Math.min(3, resultLines.length);\n for (let i = 0; i < previewCount; i++) {\n const prefix = i === 0 ? \"└ \" : \" \";\n lines.push(`${prefix}${chalk.dim(resultLines[i])}`);\n }\n const remaining = resultLines.length - previewCount;\n if (remaining > 0) {\n lines.push(\n ` ${chalk.dim(`… +${remaining} ${pluralize(remaining, \"line\", \"lines\")} (vm0 logs <runId> to see all)`)}`,\n );\n }\n }\n } else {\n // No result content, show done\n lines.push(`└ ✓ ${chalk.dim(\"Done\")}`);\n }\n\n return lines;\n}\n\n/**\n * Format Read tool output - strip line numbers and filter system content\n * Input format: \" 1→content\" (line numbers with → separator)\n * Falls back to raw content if no line numbers are present\n */\nfunction formatReadContent(resultText: string, verbose: boolean): string[] {\n const lines: string[] = [];\n const rawLines = resultText.split(\"\\n\");\n\n // Parse lines: try to extract content from line number format, strip the number prefix\n const contentLines: string[] = [];\n const lineNumberPattern = /^\\s*\\d+→(.*)$/;\n\n for (const line of rawLines) {\n const match = line.match(lineNumberPattern);\n if (match) {\n contentLines.push(match[1] ?? \"\");\n }\n }\n\n // If no line numbers found, use raw content (fallback for plain text results)\n const displayLines =\n contentLines.length > 0\n ? contentLines\n : rawLines.filter((line) => {\n return line.trim().length > 0;\n });\n const totalLines = displayLines.length;\n\n if (totalLines === 0) {\n lines.push(`└ ✓ ${chalk.dim(\"(empty)\")}`);\n return lines;\n }\n\n // Show content preview\n if (verbose) {\n for (let i = 0; i < displayLines.length; i++) {\n const prefix = i === 0 ? \"└ \" : \" \";\n lines.push(`${prefix}${chalk.dim(displayLines[i] ?? \"\")}`);\n }\n } else {\n const previewCount = Math.min(3, totalLines);\n for (let i = 0; i < previewCount; i++) {\n const prefix = i === 0 ? \"└ \" : \" \";\n lines.push(`${prefix}${chalk.dim(displayLines[i] ?? \"\")}`);\n }\n const remaining = totalLines - previewCount;\n if (remaining > 0) {\n lines.push(\n ` ${chalk.dim(`… +${remaining} ${pluralize(remaining, \"line\", \"lines\")} (vm0 logs <runId> to see all)`)}`,\n );\n }\n }\n\n return lines;\n}\n\n/**\n * Format Write tool output with content preview\n */\nfunction formatWritePreview(\n input: Record<string, unknown>,\n verbose: boolean,\n): string[] {\n const lines: string[] = [];\n const content = String(input.content || \"\");\n const contentLines = content.split(\"\\n\");\n const totalLines = contentLines.length;\n\n // Show content preview\n if (verbose) {\n for (let i = 0; i < contentLines.length; i++) {\n const prefix = i === 0 ? \"⎿ \" : \" \";\n lines.push(`${prefix}${chalk.dim(contentLines[i] ?? \"\")}`);\n }\n } else {\n const previewCount = Math.min(3, totalLines);\n for (let i = 0; i < previewCount; i++) {\n const prefix = i === 0 ? \"⎿ \" : \" \";\n lines.push(`${prefix}${chalk.dim(contentLines[i] ?? \"\")}`);\n }\n const remaining = totalLines - previewCount;\n if (remaining > 0) {\n lines.push(\n ` ${chalk.dim(`… +${remaining} ${pluralize(remaining, \"line\", \"lines\")} (vm0 logs <runId> to see all)`)}`,\n );\n }\n }\n\n return lines;\n}\n\n/**\n * Format Edit tool output as diff\n * Shows added/removed line counts and preview of changes\n */\nfunction formatEditDiff(\n input: Record<string, unknown>,\n verbose: boolean,\n): string[] {\n const lines: string[] = [];\n const oldString = String(input.old_string || \"\");\n const newString = String(input.new_string || \"\");\n\n const oldLines = oldString.split(\"\\n\");\n const newLines = newString.split(\"\\n\");\n\n const removed = oldLines.length;\n const added = newLines.length;\n\n // Summary line\n const summary = `Added ${added} ${pluralize(added, \"line\", \"lines\")}, removed ${removed} ${pluralize(removed, \"line\", \"lines\")}`;\n lines.push(`⎿ ${chalk.dim(summary)}`);\n\n if (verbose) {\n // Verbose mode: show all lines\n for (const line of oldLines) {\n lines.push(` - ${chalk.dim(line)}`);\n }\n for (const line of newLines) {\n lines.push(` + ${chalk.dim(line)}`);\n }\n } else {\n // Compact mode: show first few lines of each\n const previewLimit = 3;\n const showOld = Math.min(previewLimit, oldLines.length);\n const showNew = Math.min(previewLimit, newLines.length);\n\n // Show removed lines\n for (let i = 0; i < showOld; i++) {\n lines.push(` - ${chalk.dim(truncate(oldLines[i] ?? \"\", 60))}`);\n }\n const remainingOld = oldLines.length - previewLimit;\n if (remainingOld > 0) {\n lines.push(\n ` ${chalk.dim(`… +${remainingOld} ${pluralize(remainingOld, \"line\", \"lines\")} (vm0 logs <runId> to see all)`)}`,\n );\n }\n\n // Show added lines\n for (let i = 0; i < showNew; i++) {\n lines.push(` + ${chalk.dim(truncate(newLines[i] ?? \"\", 60))}`);\n }\n const remainingNew = newLines.length - previewLimit;\n if (remainingNew > 0) {\n lines.push(\n ` ${chalk.dim(`… +${remainingNew} ${pluralize(remainingNew, \"line\", \"lines\")} (vm0 logs <runId> to see all)`)}`,\n );\n }\n }\n\n return lines;\n}\n\n/**\n * Format TodoWrite task list with status icons\n * ✓ completed, ▸ in_progress, ◻ pending\n */\nfunction formatTodoList(input: Record<string, unknown>): string[] {\n const lines: string[] = [];\n const todos = input.todos as\n | Array<{\n id?: string;\n content?: string;\n status?: string;\n }>\n | undefined;\n\n if (!todos || !Array.isArray(todos)) {\n lines.push(\"└ ✓ Done\");\n return lines;\n }\n\n for (let i = 0; i < todos.length; i++) {\n const todo = todos[i]!;\n const content = todo.content || \"Unknown task\";\n const status = todo.status || \"pending\";\n const icon = getTodoStatusIcon(status);\n const styledContent = formatTodoContent(content, status);\n const prefix = i === 0 ? \"└ \" : \" \";\n lines.push(`${prefix}${icon} ${styledContent}`);\n }\n\n return lines;\n}\n\n/**\n * Get icon for todo status\n */\nfunction getTodoStatusIcon(status: string): string {\n switch (status) {\n case \"completed\":\n return \"✓\";\n case \"in_progress\":\n return \"▸\";\n case \"pending\":\n default:\n return \"◻\";\n }\n}\n\n/**\n * Format todo content with styling based on status\n * - completed: strikethrough + dim\n * - pending: dim\n */\nfunction formatTodoContent(content: string, status: string): string {\n switch (status) {\n case \"completed\":\n return chalk.dim.strikethrough(content);\n case \"in_progress\":\n return content;\n case \"pending\":\n default:\n return chalk.dim(content);\n }\n}\n","import chalk from \"chalk\";\nimport * as fs from \"node:fs\";\nimport { config as dotenvConfig } from \"dotenv\";\nimport { getEvents } from \"../../lib/api\";\nimport { parseEvent } from \"../../lib/events/event-parser-factory\";\nimport { EventRenderer } from \"../../lib/events/event-renderer\";\nimport {\n extractAndGroupVariables,\n firewallPoliciesSchema,\n type FirewallPolicies,\n} from \"@vm0/core\";\n/**\n * Collector for --secrets and --vars flags\n * Format: KEY=value\n */\nexport function collectKeyValue(\n value: string,\n previous: Record<string, string>,\n): Record<string, string> {\n const [key, ...valueParts] = value.split(\"=\");\n const val = valueParts.join(\"=\"); // Support values with '='\n\n if (!key || val === undefined || val === \"\") {\n throw new Error(`Invalid format: ${value} (expected KEY=value)`);\n }\n\n return { ...previous, [key]: val };\n}\n\n/**\n * Collector for --volume-version flags\n * Format: volumeName=version\n */\nexport function collectVolumeVersions(\n value: string,\n previous: Record<string, string>,\n): Record<string, string> {\n const [volumeName, ...versionParts] = value.split(\"=\");\n const version = versionParts.join(\"=\");\n\n if (!volumeName || version === undefined || version === \"\") {\n throw new Error(\n `Invalid volume-version format: ${value} (expected volumeName=version)`,\n );\n }\n\n return { ...previous, [volumeName]: version };\n}\n\n/**\n * Parse and validate --firewall-policies JSON string.\n * Returns undefined when no value is provided.\n */\nexport function parseFirewallPolicies(\n json: string | undefined,\n): FirewallPolicies | undefined {\n if (!json) return undefined;\n let parsed: unknown;\n try {\n parsed = JSON.parse(json);\n } catch {\n throw new Error(\n `Invalid --firewall-policies JSON: ${json}\\nExpected format: '{\"ref\": {\"permission\": \"allow|deny|ask\"}}'`,\n );\n }\n const result = firewallPoliciesSchema.safeParse(parsed);\n if (!result.success) {\n throw new Error(\n `Invalid --firewall-policies: ${result.error.issues\n .map((i) => {\n return i.message;\n })\n .join(\", \")}`,\n );\n }\n return result.data;\n}\n\nexport function isUUID(str: string): boolean {\n return /^[0-9a-f-]{36}$/i.test(str);\n}\n\n/**\n * Extract var names from compose config\n */\nexport function extractVarNames(composeContent: unknown): string[] {\n const grouped = extractAndGroupVariables(composeContent);\n return grouped.vars.map((r) => {\n return r.name;\n });\n}\n\n/**\n * Extract secret names from compose config\n */\nexport function extractSecretNames(composeContent: unknown): string[] {\n const grouped = extractAndGroupVariables(composeContent);\n return grouped.secrets.map((r) => {\n return r.name;\n });\n}\n\n/**\n * Load values with priority: CLI args > --env-file > environment variables\n *\n * For values referenced in the compose config but not provided via CLI,\n * falls back to --env-file (if specified) and environment variables.\n * CLI-provided values are always passed through.\n *\n * Priority order (matches Docker CLI):\n * 1. CLI flags (--vars, --secrets) - HIGHEST\n * 2. --env-file values - MEDIUM\n * 3. process.env - LOWEST\n *\n * @param cliValues Values passed via CLI flags\n * @param configNames Names referenced in compose config (for env fallback)\n * @param envFilePath Optional path to env file (only loads if explicitly provided)\n * @returns Merged values object with CLI taking highest priority\n */\nexport function loadValues(\n cliValues: Record<string, string>,\n configNames: string[],\n envFilePath?: string,\n): Record<string, string> | undefined {\n // Start with CLI-provided values (highest priority, always passed through)\n const result: Record<string, string> = { ...cliValues };\n\n // For names referenced in config but not provided via CLI, load from file/env\n const missingNames = configNames.filter((name) => {\n return !(name in result);\n });\n\n if (missingNames.length > 0) {\n // Get from environment variables (lowest priority)\n const envValues: Record<string, string> = {};\n for (const name of missingNames) {\n const envValue = process.env[name];\n if (envValue !== undefined) {\n envValues[name] = envValue;\n }\n }\n\n // Load from --env-file if explicitly provided (medium priority, overrides env)\n let fileValues: Record<string, string> = {};\n if (envFilePath) {\n if (!fs.existsSync(envFilePath)) {\n throw new Error(`Environment file not found: ${envFilePath}`);\n }\n const dotenvResult = dotenvConfig({ path: envFilePath, quiet: true });\n if (dotenvResult.parsed) {\n // Only include keys that are missing from CLI\n fileValues = Object.fromEntries(\n Object.entries(dotenvResult.parsed).filter(([key]) => {\n return missingNames.includes(key);\n }),\n );\n }\n }\n\n // Merge with priority: file > env (CLI already in result)\n // Apply env first, then file values override\n Object.assign(result, envValues, fileValues);\n }\n\n return Object.keys(result).length > 0 ? result : undefined;\n}\n\n/**\n * Parse identifier with optional org and version specifier\n * Format: name[:version]\n * Examples:\n * \"demo:d084948d\" → { name: \"demo\", version: \"d084948d\" }\n * \"demo:latest\" → { name: \"demo\", version: \"latest\" }\n * \"demo\" → { name: \"demo\" }\n */\nexport function parseIdentifier(identifier: string): {\n name: string;\n version?: string;\n} {\n // UUIDs don't contain colons or slashes, so check first\n if (isUUID(identifier)) {\n return { name: identifier };\n }\n\n // Parse name:version format using indexOf (version comes after name)\n const colonIndex = identifier.indexOf(\":\");\n if (colonIndex > 0 && colonIndex < identifier.length - 1) {\n return {\n name: identifier.slice(0, colonIndex),\n version: identifier.slice(colonIndex + 1),\n };\n }\n\n return { name: identifier };\n}\n\n/**\n * Display run created info (queued or started)\n */\nexport function renderRunCreated(response: {\n status: string;\n runId: string;\n sandboxId?: string;\n}): void {\n if (response.status === \"queued\") {\n console.log(chalk.yellow(\"⚠ Run queued — concurrency limit reached\"));\n console.log(` Run ID: ${chalk.dim(response.runId)}`);\n console.log(\n chalk.dim(\" Will start automatically when a slot is available\"),\n );\n console.log();\n } else {\n EventRenderer.renderRunStarted({\n runId: response.runId,\n sandboxId: response.sandboxId,\n });\n }\n}\n\nexport interface PollResult {\n succeeded: boolean;\n runId: string;\n sessionId?: string;\n checkpointId?: string;\n}\n\n/**\n * Options for polling/streaming events\n */\nexport interface EventRenderingOptions {\n verbose?: boolean;\n}\n\n/**\n * Poll for events until run completes (via run.status field)\n * @returns Poll result with success status and optional session/checkpoint IDs\n */\nexport async function pollEvents(\n runId: string,\n options?: EventRenderingOptions,\n): Promise<PollResult> {\n const renderer = new EventRenderer({ verbose: options?.verbose });\n\n let nextSequence = -1;\n let complete = false;\n let result: PollResult = { succeeded: true, runId };\n const pollIntervalMs = 1000;\n\n while (!complete) {\n const response = await getEvents(runId, {\n since: nextSequence,\n });\n\n // Render agent events (use appropriate renderer based on framework from API)\n for (const event of response.events) {\n const eventData = event.eventData as Record<string, unknown>;\n\n const parsed = parseEvent(eventData);\n if (parsed) {\n renderer.render(parsed);\n }\n }\n\n nextSequence = response.nextSequence;\n\n // Check run status for completion (replaces vm0_result/vm0_error events)\n const runStatus = response.run.status;\n\n if (runStatus === \"completed\") {\n complete = true;\n // Render completion info\n EventRenderer.renderRunCompleted(response.run.result);\n result = {\n succeeded: true,\n runId,\n sessionId: response.run.result?.agentSessionId,\n checkpointId: response.run.result?.checkpointId,\n };\n } else if (runStatus === \"failed\") {\n complete = true;\n // Render error info\n EventRenderer.renderRunFailed(response.run.error, runId);\n result = { succeeded: false, runId };\n } else if (runStatus === \"timeout\") {\n complete = true;\n console.error(chalk.red(\"\\n✗ Run timed out\"));\n console.error(\n chalk.dim(` (use \"vm0 logs ${runId} --system\" to view system logs)`),\n );\n result = { succeeded: false, runId };\n } else if (runStatus === \"cancelled\") {\n complete = true;\n console.error(chalk.yellow(\"\\n✗ Run cancelled\"));\n result = { succeeded: false, runId };\n }\n\n // If not complete, wait before next poll\n if (!complete) {\n await new Promise((resolve) => {\n return setTimeout(resolve, pollIntervalMs);\n });\n }\n }\n\n return result;\n}\n\n/**\n * Display next steps after successful run\n */\nexport function showNextSteps(result: PollResult): void {\n const { runId, sessionId, checkpointId } = result;\n\n console.log();\n\n // Always show logs command since we always have runId\n console.log(\" View agent logs:\");\n console.log(chalk.cyan(` vm0 logs ${runId}`));\n\n if (sessionId) {\n console.log(\" Continue with session (latest conversation and artifact):\");\n console.log(\n chalk.cyan(` vm0 run continue ${sessionId} \"your next prompt\"`),\n );\n }\n if (checkpointId) {\n console.log(\n \" Resume from checkpoint (snapshotted conversation and artifact):\",\n );\n console.log(\n chalk.cyan(` vm0 run resume ${checkpointId} \"your next prompt\"`),\n );\n }\n}\n","/**\n * Factory for creating the appropriate event parser based on framework type\n * Also supports auto-detection from event format\n */\n\nimport { ClaudeEventParser, type ParsedEvent } from \"./claude-event-parser\";\n\n/**\n * Parse an event using the Claude Code parser\n * @param rawEvent The raw event data from the API\n * @returns Parsed event or null if not parseable\n */\nexport function parseEvent(\n rawEvent: Record<string, unknown>,\n): ParsedEvent | null {\n return ClaudeEventParser.parse(rawEvent);\n}\n"],"mappings":"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CA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,wDAAwD;AAAA,QAClE;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,qDAAqD;AAAA,QAC/D;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;A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CA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AA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;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,2DAA2D;AAAA,QACrE;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,2CAA2C;AAAA,QACrD;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,+CAA+C;AAAA,QACzD;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,oBAAoB,6BAA6B;AAAA,QAC3D;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,oBAAoB,yBAAyB;AAAA,QACvD;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,sBAAsB,iCAAiC;AAAA,QACjE;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,uBAAuB,oCAAoC;AAAA,QACrE;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,mBAAmB,4BAA4B;AAAA,QACzD;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,8BAA8B;AAAA,QACxC;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,uCAAuC;AAAA,QACjD;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,SAAS;AAAA,UACP,eAAe;AAAA,QACjB;AAAA,MACF;AAAA,MACA,aAAa;AAAA,QACX;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,yDAAyD;AAAA,QACnE;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AC7sDO,IAAM,iBAAiC;AAAA,EAC5C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,IACZ,cAAc;AAAA,EAChB;AAAA,EACA,MAAM;AAAA,IACJ;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,SAAS;AAAA,UACP,iBAAiB;AAAA,QACnB;AAAA,MACF;AAAA,MACA,aAAa,CAAC;AAAA,IAChB;AAAA,EACF;AACF;;;ACjBO,IAAM,gBAAgC;AAAA,EAC3C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,IACZ,aACE;AAAA,EACJ;AAAA,EACA,MAAM;AAAA,IACJ;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,SAAS;AAAA,UACP,eAAe;AAAA,QACjB;AAAA,MACF;AAAA,MACA,aAAa;AAAA,QACX;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,uCAAuC;AAAA,QACjD;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAA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AA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO,CAAC,gCAAgC;AAAA,QAC1C;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA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,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,SAAS;AAAA,UACP,eAAe;AAAA,QACjB;AAAA,MACF;AAAA,MAC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CA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACvrBO,IAAM,kBAAkC;AAAA,EAC7C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,IACZ,eAAe;AAAA,EACjB;AAAA,EACA,MAAM;AAAA,IACJ;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,SAAS;AAAA,UACP,eAAe;AAAA,QACjB;AAAA,MACF;AAAA,MACA,aAAa,CAAC;AAAA,IAChB;AAAA,EACF;AACF;;;ACjBO,IAAM,kBAAkC;AAAA,EAC7C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,IACZ,eAAe;AAAA,EACjB;AAAA,EACA,MAAM;AAAA,IACJ;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,SAAS;AAAA,UACP,eAAe;AAAA,QACjB;AAAA,MACF;AAAA,MACA,aAAa,CAAC;AAAA,IAChB;AAAA,EACF;AACF;;;ACjBO,IAAM,qBAAqC;AAAA,EAChD,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,IACZ,kBAAkB;AAAA,EACpB;AAAA,EACA,MAAM;AAAA,IACJ;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,SAAS;AAAA,UACP,WAAW;AAAA,QACb;AAAA,MACF;AAAA,MACA,aAAa,CAAC;AAAA,IAChB;AAAA,EACF;AACF;;;ACjBO,IAAM,kBAAkC;AAAA,EAC7C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,IACZ,eAAe;AAAA,EACjB;AAAA,EACA,MAAM;AAAA,IACJ;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,SAAS;AAAA,UACP,eAAe;AAAA,QACjB;AAAA,MACF;AAAA,MACA,aAAa,CAAC;AAAA,IAChB;AAAA,EACF;AACF;;;ACjBO,IAAM,iBAAiC;AAAA,EAC5C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,IACZ,cACE;AAAA,EACJ;AAAA,EACA,MAAM;AAAA,IACJ;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,SAAS;AAAA,UACP,eAAe;AAAA,QACjB;AAAA,MACF;AAAA,MACA,aAAa,CAAC;AAAA,IAChB;AAAA,EACF;AACF;;;AClBO,IAAM,iBAAiC;AAAA,EAC5C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,IACZ,cAAc;AAAA,EAChB;AAAA,EACA,MAAM;AAAA,IACJ;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,SAAS;AAAA,UACP,eAAe;AAAA,QACjB;AAAA,MACF;AAAA,MACA,aAAa,CAAC;AAAA,IAChB;AAAA,EACF;AACF;;;ACjBO,IAAM,mBAAmC;AAAA,EAC9C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,IACZ,gBAAgB;AAAA,EAClB;AAAA,EACA,MAAM;AAAA,IACJ;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,SAAS;AAAA,UACP,eAAe;AAAA,QACjB;AAAA,MACF;AAAA,MACA,aAAa,CAAC;AAAA,IAChB;AAAA,EACF;AACF;;;ACjBO,IAAM,mBAAmC;AAAA,EAC9C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,IACZ,gBAAgB;AAAA,EAClB;AAAA,EACA,MAAM;AAAA,IACJ;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,SAAS;AAAA,UACP,aAAa;AAAA,QACf;AAAA,MACF;AAAA,MACA,aAAa,CAAC;AAAA,IAChB;AAAA,EACF;AACF;;;ACjBO,IAAM,iBAAiC;AAAA,EAC5C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,IACZ,cAAc;AAAA,EAChB;AAAA,EACA,MAAM;AAAA,IACJ;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,SAAS;AAAA,UACP,eAAe;AAAA,QACjB;AAAA,MACF;AAAA,MACA,aAAa,CAAC;AAAA,IAChB;AAAA,EACF;AACF;;;ACjBO,IAAM,eAA+B;AAAA,EAC1C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,IACZ,YAAY;AAAA,EACd;AAAA,EACA,MAAM;AAAA,IACJ;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,SAAS;AAAA,UACP,aAAa;AAAA,QACf;AAAA,MACF;AAAA,MACA,aAAa,CAAC;AAAA,IAChB;AAAA,EACF;AACF;;;ACjBO,IAAM,kBAAkC;AAAA,EAC7C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,IACZ,eAAe;AAAA,EACjB;AAAA,EACA,MAAM;AAAA,IACJ;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,SAAS;AAAA,UACP,eAAe;AAAA,QACjB;AAAA,MACF;AAAA,MACA,aAAa,CAAC;AAAA,IAChB;AAAA,EACF;AACF;;;ACjBO,IAAM,iBAAiC;AAAA,EAC5C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,IACZ,cACE;AAAA,EACJ;AAAA,EACA,MAAM;AAAA,IACJ;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,SAAS;AAAA,UACP,eAAe;AAAA,QACjB;AAAA,MACF;AAAA,MACA,aAAa,CAAC;AAAA,IAChB;AAAA,EACF;AACF;;;AClBO,IAAM,aAA6B;AAAA,EACxC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,SAAS;AAAA,UACP,eAAe;AAAA,QACjB;AAAA,MACF;AAAA,MACA,aAAa,CAAC;AAAA,IAChB;AAAA,EACF;AACF;;;ACjBO,IAAM,iBAAiC;AAAA,EAC5C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,IACZ,cACE;AAAA,EACJ;AAAA,EACA,MAAM;AAAA,IACJ;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,SAAS;AAAA,UACP,eAAe;AAAA,QACjB;AAAA,MACF;AAAA,MACA,aAAa;AAAA,QACX;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO,CAAC,qDAAqD;AAAA,QAC/D;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO,CAAC,iCAAiC,qBAAqB;AAAA,QAChE;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO,CAAC,wBAAwB,kCAAkC;AAAA,QACpE;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO,CAAC,sBAAsB;AAAA,QAChC;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO,CAAC,0BAA0B,iCAAiC;AAAA,QACrE;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO,CAAC,oBAAoB;AAAA,QAC9B;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO,CAAC,kBAAkB,iBAAiB,uBAAuB;AAAA,QACpE;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO,CAAC,kCAAkC;AAAA,QAC5C;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO,CAAC,kBAAkB,qBAAqB;AAAA,QACjD;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO,CAAC,qCAAqC;AAAA,QAC/C;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO,CAAC,oDAAoD;AAAA,QAC9D;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO,CAAC,wBAAwB,gBAAgB,gBAAgB;AAAA,QAClE;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO,CAAC,iBAAiB;AAAA,QAC3B;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO,CAAC,oBAAoB,uBAAuB;AAAA,QACrD;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO,CAAC,qBAAqB,0BAA0B;AAAA,QACzD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACnnBO,IAAM,kBAAkC;AAAA,EAC7C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,IACZ,eACE;AAAA,EACJ;AAAA,EACA,MAAM;AAAA,IACJ;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,SAAS;AAAA,UACP,eAAe;AAAA,QACjB;AAAA,MACF;AAAA,MACA,aAAa,CAAC;AAAA,IAChB;AAAA,EACF;AACF;;;AClBO,IAAM,cAA8B;AAAA,EACzC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,IACZ,WAAW;AAAA,EACb;AAAA,EACA,MAAM;AAAA,IACJ;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,SAAS;AAAA,UACP,eAAe;AAAA,QACjB;AAAA,MACF;AAAA,MACA,aAAa,CAAC;AAAA,IAChB;AAAA,EACF;AACF;;;ACjBO,IAAM,gBAAgC;AAAA,EAC3C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,IACZ,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,SAAS;AAAA,UACP,eAAe;AAAA,QACjB;AAAA,MACF;AAAA,MACA,aAAa,CAAC;AAAA,IAChB;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,SAAS;AAAA,UACP,eAAe;AAAA,QACjB;AAAA,MACF;AAAA,MACA,aAAa,CAAC;AAAA,IAChB;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,SAAS;AAAA,UACP,eAAe;AAAA,QACjB;AAAA,MACF;AAAA,MACA,aAAa,CAAC;AAAA,IAChB;AAAA,EACF;AACF;;;ACnCO,IAAM,YAA4B;AAAA,EACvC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,IACZ,SACE;AAAA,EACJ;AAAA,EACA,MAAM;AAAA,IACJ;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,SAAS;AAAA,UACP,eAAe;AAAA,QACjB;AAAA,MACF;AAAA,MACA,aAAa;AAAA,QACX;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,4BAA4B;AAAA,QACtC;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,+BAA+B,6BAA6B;AAAA,QACtE;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,0BAA0B;AAAA,QACpC;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO,CAAC,4BAA4B;AAAA,QACtC;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,iCAAiC;AAAA,QAC3C;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aACE;AAAA,UACF,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA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","names":["z","z","z","z","z","z","z","z","z","c","z","z","c","z","c","z","z","c","z","z","c","z","z","c","z","z","c","z","z","c","z","z","z","z","z","z","z","z","c","z","c","storedChatMessageSchema","z","artifactSnapshotSchema","volumeVersionsSnapshotSchema","z","c","z","c","z","c","z","z","z","z","z","c","z","z","z","c","z","z","c","z","z","c","z","z","c","z","z","c","z","z","c","z","c","c","c","z","c","z","z","z","c","z","c","z","z","c","z","z","c","z","z","c","z","storedChatMessageSchema","z","c","z","z","c","z","z","c","z","z","c","z","z","c","z","z","c","z","z","c","z","z","c","z","z","c","z","z","c","z","parseYaml","initClient","initClient","initClient","chalk","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","initClient","available","initClient","initClient","initClient","initClient","chalk","chalk","chalk","chalk","chalk"]}