@vm0/cli 9.82.1 → 9.83.0
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.
- package/{chunk-2KN52BP2.js → chunk-Z7ZCVASY.js} +655 -214
- package/chunk-Z7ZCVASY.js.map +1 -0
- package/index.js +92 -452
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/zero.js +117 -79
- package/zero.js.map +1 -1
- package/chunk-2KN52BP2.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
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/firewall-loader.ts","../../../packages/core/src/contracts/firewalls.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/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/clickup.generated.ts","../../../packages/core/src/firewalls/close.generated.ts","../../../packages/core/src/firewalls/cloudflare.generated.ts","../../../packages/core/src/firewalls/confluence.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/discord.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/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/jira.generated.ts","../../../packages/core/src/firewalls/jotform.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/mailsac.generated.ts","../../../packages/core/src/firewalls/mercury.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/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/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/slack.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/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/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/zeptomail.generated.ts","../../../packages/core/src/firewalls/index.ts","../../../packages/core/src/contracts/firewall-expander.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/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/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/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-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/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-orgs.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/runs.ts","../src/lib/api/domains/sessions.ts","../src/lib/api/domains/storages.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/integrations-slack.ts","../src/lib/api/domains/zero-schedules.ts","../src/lib/utils/prompt-utils.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) => pattern.test(message));\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 activeOrg?: 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 > VM0_ACTIVE_ORG env var > activeOrg from config file\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 (new format: vm0_sandbox_ with scope \"cli\")\n const token = await getToken();\n const cliPayload = decodeCliTokenPayload(token);\n if (cliPayload) return cliPayload.orgId;\n\n // Fall back to VM0_ACTIVE_ORG env var (legacy)\n if (process.env.VM0_ACTIVE_ORG) {\n return process.env.VM0_ACTIVE_ORG;\n }\n\n // Fall back to config file\n const config = await loadConfig();\n return config.activeOrg;\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 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 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) => expand(item));\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.map((r) => r.name).join(\", \");\n messages.push(`Environment variables: ${names}`);\n }\n\n if (grouped.vars.length > 0) {\n const names = grouped.vars.map((r) => r.name).join(\", \");\n messages.push(`CLI variables (--vars): ${names}`);\n }\n\n if (grouped.secrets.length > 0) {\n const names = grouped.secrets.map((r) => r.name).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 * 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 { builtinFirewalls } 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 = !trimmed.includes(\"/\")\n ? builtinFirewalls[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) => `${i.path.join(\".\")}: ${i.message}`)\n .join(\"; \");\n throw new Error(`Invalid firewall config \"${ref}\": ${issues}`);\n }\n\n return result.data;\n}\n","import { z } from \"zod\";\nimport type { ConnectorType } from \"./connectors\";\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 expandFirewallConfigs() 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 * Maps connector types (skill short names) to their builtin firewall ref(s).\n * Only includes connectors that have builtin firewall configs.\n */\nconst CONNECTOR_FIREWALL_REFS: Readonly<\n Partial<Record<ConnectorType, readonly string[]>>\n> = {\n agentmail: [\"agentmail\"],\n ahrefs: [\"ahrefs\"],\n airtable: [\"airtable\"],\n apify: [\"apify\"],\n asana: [\"asana\"],\n atlassian: [\"jira\", \"confluence\"],\n axiom: [\"axiom\"],\n \"brave-search\": [\"brave-search\"],\n brevo: [\"brevo\"],\n \"bright-data\": [\"bright-data\"],\n browserbase: [\"browserbase\"],\n browserless: [\"browserless\"],\n \"cal-com\": [\"cal-com\"],\n calendly: [\"calendly\"],\n canva: [\"canva\"],\n clickup: [\"clickup\"],\n close: [\"close\"],\n cloudflare: [\"cloudflare\"],\n cronlytic: [\"cronlytic\"],\n \"customer-io\": [\"customer-io\"],\n deel: [\"deel\"],\n deepseek: [\"deepseek\"],\n devto: [\"devto\"],\n discord: [\"discord\"],\n dropbox: [\"dropbox\"],\n elevenlabs: [\"elevenlabs\"],\n explorium: [\"explorium\"],\n fal: [\"fal\"],\n figma: [\"figma\"],\n firecrawl: [\"firecrawl\"],\n fireflies: [\"fireflies\"],\n \"garmin-connect\": [\"garmin-connect\"],\n github: [\"github\"],\n gitlab: [\"gitlab\"],\n gmail: [\"gmail\"],\n \"google-calendar\": [\"google-calendar\"],\n \"google-docs\": [\"google-docs\"],\n \"google-drive\": [\"google-drive\"],\n \"google-sheets\": [\"google-sheets\"],\n granola: [\"granola\"],\n heygen: [\"heygen\"],\n hubspot: [\"hubspot\"],\n \"hugging-face\": [\"hugging-face\"],\n hume: [\"hume\"],\n imgur: [\"imgur\"],\n instagram: [\"instagram\"],\n instantly: [\"instantly\"],\n intercom: [\"intercom\"],\n \"intervals-icu\": [\"intervals-icu\"],\n jotform: [\"jotform\"],\n lark: [\"lark\"],\n line: [\"line\"],\n linear: [\"linear\"],\n loops: [\"loops\"],\n mailsac: [\"mailsac\"],\n mercury: [\"mercury\"],\n \"meta-ads\": [\"meta-ads\"],\n minimax: [\"minimax\"],\n monday: [\"monday\"],\n neon: [\"neon\"],\n notion: [\"notion\"],\n openai: [\"openai\"],\n \"outlook-calendar\": [\"outlook-calendar\"],\n \"outlook-mail\": [\"outlook-mail\"],\n pdf4me: [\"pdf4me\"],\n pdfco: [\"pdfco\"],\n pdforge: [\"pdforge\"],\n perplexity: [\"perplexity\"],\n plausible: [\"plausible\"],\n podchaser: [\"podchaser\"],\n posthog: [\"posthog\"],\n \"prisma-postgres\": [\"prisma-postgres\"],\n productlane: [\"productlane\"],\n pushinator: [\"pushinator\"],\n qiita: [\"qiita\"],\n reddit: [\"reddit\"],\n reportei: [\"reportei\"],\n resend: [\"resend\"],\n revenuecat: [\"revenuecat\"],\n runway: [\"runway\"],\n scrapeninja: [\"scrapeninja\"],\n sentry: [\"sentry\"],\n serpapi: [\"serpapi\"],\n shortio: [\"shortio\"],\n similarweb: [\"similarweb\"],\n slack: [\"slack\"],\n strava: [\"strava\"],\n stripe: [\"stripe\"],\n supabase: [\"supabase\"],\n supadata: [\"supadata\"],\n tavily: [\"tavily\"],\n tldv: [\"tldv\"],\n todoist: [\"todoist\"],\n v0: [\"v0\"],\n vercel: [\"vercel\"],\n webflow: [\"webflow\"],\n wix: [\"wix\"],\n x: [\"x\"],\n xero: [\"xero\"],\n youtube: [\"youtube\"],\n zapier: [\"zapier\"],\n zapsign: [\"zapsign\"],\n zeptomail: [\"zeptomail\"],\n};\n\n/** Get the firewall ref names for a connector type. Returns empty array if none. */\nexport function getFirewallRefsForConnector(\n connector: ConnectorType,\n): string[] {\n return [...(CONNECTOR_FIREWALL_REFS[connector] ?? [])];\n}\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 * 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","// 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_00000000000000000000000000000000\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"Vm0PlaceHolder0000000000000000000000000000\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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 \"patVm0PlaceHolder.0000000000000000000000000000000000000000000000000000000000000000\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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_Vm0PlaceHolder0000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"Vm0PlaceHolder0000000000000000000000000000\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\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-00000000-0000-0000-0000-000000000000\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"BSAIVm0PlaceHolder00000000\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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-Vm0PlaceHolder0000000000000000000000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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 \"b5648e10vm0placeholder0000000000000000000000000000000000000000abcd\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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_vm0placeholder_000000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"094632bb-vm00-0000-0000-vm0placeholder\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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_vm0placeholder000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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:\n \"eyJhbGciOiJIUzI1NiJ9.vm0placeholder000000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"vm0placeholderCanvaToken00000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all Canva Connect API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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_0000000_VM0PLACEHOLDER0000000000000000000A\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"Vm0PlaceHolder00000000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"vm0placeholder0000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Confluence Cloud's official OpenAPI spec.\n// Source: https://developer.atlassian.com/cloud/confluence/swagger.v3.json\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:confluence\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const confluenceFirewall: FirewallConfig = {\n name: \"confluence\",\n description: \"Confluence Cloud API\",\n placeholders: {\n ATLASSIAN_TOKEN:\n \"ATATT3xVm0PlaceHolder000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\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: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\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: \"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: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: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 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: \"vm0placeholderCronlyticApiKey000000000000000000000000a\",\n CRONLYTIC_USER_ID: \"vm0placeholderCronlyticUserId000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all Cronlytic API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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 \"vm0placeholder00000000000000000000000000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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-Vm0PlaceHolder0000000000000000000000000000000000\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"vm0placeholderDeelToken000000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all Deel API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"Vm0PlaceHolder00000000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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 \"Vm0PlaceHolder0000000000.000000.Vm0PlaceHolder0000000000000\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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.vm0placeholder000000000000000000000000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n {\n base: \"https://content.dropboxapi.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.DROPBOX_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"Vm0PlaceHolder00000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"vm0placeholderExploriumToken0000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all Explorium API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"Vm0PlaceHolder00:sk_live_Vm0PlaceHolder00000000000000\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n {\n base: \"https://queue.fal.run\",\n auth: {\n headers: {\n Authorization: \"Key ${{ secrets.FAL_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n {\n base: \"https://api.fal.ai\",\n auth: {\n headers: {\n Authorization: \"Key ${{ secrets.FAL_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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_Vm0PlaceHolder00000000000000000000000000\",\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: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\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\"],\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-Vm0PlaceHolder00000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"Vm0PlaceHolder00000000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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 \"vm0placeholderGarminConnectToken000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all Garmin Connect API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\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_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: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\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-Vm0PlaceHolder000000\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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.A0Vm0PlaceHolder-Vm0_PlaceHolder00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\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: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\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: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\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: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\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.A0Vm0PlaceHolder-Vm0_PlaceHolder00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\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: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\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.A0Vm0PlaceHolder-Vm0_PlaceHolder00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\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: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\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.A0Vm0PlaceHolder-Vm0_PlaceHolder00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\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: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\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: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\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: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\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.A0Vm0PlaceHolder-Vm0_PlaceHolder00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\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: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\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: \"vm0placeholderGranolaToken0000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all Granola API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"Vm0PlaceHolder00000000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"Vm0PlaceHolder00000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"hf_Vm0PlaceHolder0000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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 \"vm0placeholder00000000000000000000000000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"vm0placeholder000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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_ACCESS_TOKEN:\n \"vm0placeholderInstagramAccessToken00000000000000000000a\",\n },\n apis: [\n {\n base: \"https://graph.instagram.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.INSTAGRAM_ACCESS_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all Instagram Graph API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"vm0placeholderInstantlyApiKey000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all Instantly API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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 \"dG9rOiVm0PlaceHolder000000000000000000000000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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 \"vm0placeholderIntervalsIcuToken0000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all Intervals.icu API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Jira Cloud's official OpenAPI spec.\n// Source: https://developer.atlassian.com/cloud/jira/platform/swagger-v3.v3.json\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:jira\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../contracts/firewalls\";\n\nexport const jiraFirewall: FirewallConfig = {\n name: \"jira\",\n description: \"Jira Cloud API\",\n placeholders: {\n ATLASSIAN_TOKEN:\n \"ATATT3xVm0PlaceHolder000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\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: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\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: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: \"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 },\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 \"vm0placeholder00000000000000000000000000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n {\n base: \"https://eu-api.jotform.com\",\n auth: {\n headers: {\n APIKEY: \"${{ secrets.JOTFORM_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n {\n base: \"https://hipaa-api.jotform.com\",\n auth: {\n headers: {\n APIKEY: \"${{ secrets.JOTFORM_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"vm0placeholderLarkToken000000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all Lark API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n {\n base: \"https://open.feishu.cn\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.LARK_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all Feishu API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"vm0placeholderLineToken000000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all LINE API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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_Vm0PlaceHolder00000000000000000000000000\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"00000000000000000000000000000000\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"vm0placeholderMailsacToken0000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all Mailsac API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"vm0placeholderMercuryToken0000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all Mercury API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"vm0placeholderMetaAdsToken0000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all Meta Ads API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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.vm0placeholder000000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IlZtMFBsYWNlSG9sZGVyIiwiaWF0IjoxNTE2MjM5MDIyfQ.Vm0PlaceHolder00000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"Vm0PlaceHolder00000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"ntn_00000000000Vm0PlaceHolder000000000000000000Aaa\",\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: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\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-Vm0PlaceHolder000000000000000000000000000000000000000000000000000000000000T3BlbkFJVm0PlaceHolder000000000000000000000000000000000000000000000000000000000000\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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 \"vm0placeholderOutlookCalendarToken00000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all Microsoft Graph API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"vm0placeholderOutlookMailToken0000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all Microsoft Graph API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"vm0placeholderPdf4meToken000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all PDF4me API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"vm0placeholderPdfcoToken0000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all PDF.co API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"vm0placeholderPdforgeApiKey00000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all PDForge API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"pplx-Vm0PlaceHolder0000000000000000000000000000000000\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"Vm0PlaceHolder00000000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"vm0placeholderPodchaserToken00000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all Podchaser API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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_Vm0PlaceHolder00000000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n {\n base: \"https://eu.posthog.com\",\n auth: {\n headers: {\n Authorization: \"Bearer ${{ secrets.POSTHOG_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"vm0placeholderProductlaneToken0000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all Productlane API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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 \"vm0placeholderPrismaPostgresToken0000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all Prisma Postgres API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"vm0placeholderPushinatorToken000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all Pushinator API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"vm0placeholderQiitaToken0000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all Qiita API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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 \"vm0placeholder00000000000000000000000000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"vm0placeholderReporteiToken00000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all Reportei API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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_Vm0PlaceHolder000000000000000000\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"vm0placeholderRevenuecatToken000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all RevenueCat API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"Vm0PlaceHolder00000000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"vm0placeholderScrapeninjaToken0000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all ScrapeNinja API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from Sentry API docs.\n// Source: https://docs.sentry.io/api/auth/\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: \"Vm0PlaceHolder00000000000000000a\",\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: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\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: \"Vm0PlaceHolder00000000000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"Vm0PlaceHolder00000000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"vm0placeholderSimilarwebToken00000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all SimilarWeb API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\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\";\n\nexport const slackFirewall: FirewallConfig = {\n name: \"slack\",\n description: \"Slack API\",\n placeholders: {\n SLACK_TOKEN: \"xoxb-000000000000-0000000000000-Vm0PlaceHolder0000000000\",\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: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\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: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n {\n name: \"files:read\",\n description: \"Download files from Slack\",\n rules: [\"GET /{path+}\"],\n },\n ],\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 \"vm0placeholder00000000000000000000000000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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_Vm0PlaceHolder00000000000000000000\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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_0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"vm0placeholderSupadataToken00000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all Supadata API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"tvly-Vm0PlaceHolder0000000000000000000\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"vm0placeholderTldvToken000000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all tl;dv API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"0000000000000000000000000000000000000000\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"vm0placeholderV0Token00000000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all v0 API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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_Vm0PlaceHolder000000000000000000000000000000000000000000\",\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: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\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: \"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\", \"GET /v5/user/tokens/{tokenId}\"],\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: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 \"vm0placeholder00000000000000000000000000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"vm0placeholderWixToken0000000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all Wix API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\n },\n ],\n};\n","// Auto-generated from X (Twitter) API docs.\n// Source: https://docs.x.com/fundamentals/authentication/oauth-2-0/bearer-tokens\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 \"AAAAAAAAAAAAAAAAAAAAAAVm0PlaceHolder0000000000000000000000000000000000000000000000000000000000000000000000\",\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: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\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: \"vm0placeholderXeroToken000000000000000000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all Xero API endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"AIzaSyBVm0PlaceHolder000000000000000000\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"Vm0PlaceHolder0000000000000000000000000000\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"00000000-0000-0000-0000-00000000\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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: \"vm0placeholder00000000000000000a\",\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 name: \"unrestricted\",\n description: \"Allow all endpoints\",\n rules: [\"ANY /{path*}\"],\n },\n ],\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 { FirewallConfig } from \"../contracts/firewalls\";\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 { 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 { clickupFirewall } from \"./clickup.generated\";\nimport { closeFirewall } from \"./close.generated\";\nimport { cloudflareFirewall } from \"./cloudflare.generated\";\nimport { confluenceFirewall } from \"./confluence.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 { discordFirewall } from \"./discord.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 { 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 { jiraFirewall } from \"./jira.generated\";\nimport { jotformFirewall } from \"./jotform.generated\";\nimport { larkFirewall } from \"./lark.generated\";\nimport { lineFirewall } from \"./line.generated\";\nimport { linearFirewall } from \"./linear.generated\";\nimport { loopsFirewall } from \"./loops.generated\";\nimport { mailsacFirewall } from \"./mailsac.generated\";\nimport { mercuryFirewall } from \"./mercury.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 { 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 { 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 { 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 { v0Firewall } from \"./v0.generated\";\nimport { vercelFirewall } from \"./vercel.generated\";\nimport { webflowFirewall } from \"./webflow.generated\";\nimport { wixFirewall } from \"./wix.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 { zeptomailFirewall } from \"./zeptomail.generated\";\n\nexport const builtinFirewalls: Record<string, FirewallConfig> = {\n agentmail: agentmailFirewall,\n ahrefs: ahrefsFirewall,\n airtable: airtableFirewall,\n apify: apifyFirewall,\n asana: asanaFirewall,\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 clickup: clickupFirewall,\n close: closeFirewall,\n cloudflare: cloudflareFirewall,\n confluence: confluenceFirewall,\n cronlytic: cronlyticFirewall,\n \"customer-io\": customerIoFirewall,\n deel: deelFirewall,\n deepseek: deepseekFirewall,\n devto: devtoFirewall,\n discord: discordFirewall,\n dropbox: dropboxFirewall,\n elevenlabs: elevenlabsFirewall,\n explorium: exploriumFirewall,\n fal: falFirewall,\n figma: figmaFirewall,\n firecrawl: firecrawlFirewall,\n fireflies: firefliesFirewall,\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 jira: jiraFirewall,\n jotform: jotformFirewall,\n lark: larkFirewall,\n line: lineFirewall,\n linear: linearFirewall,\n loops: loopsFirewall,\n mailsac: mailsacFirewall,\n mercury: mercuryFirewall,\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 qiita: qiitaFirewall,\n reddit: redditFirewall,\n reportei: reporteiFirewall,\n resend: resendFirewall,\n revenuecat: revenuecatFirewall,\n runway: runwayFirewall,\n scrapeninja: scrapeninjaFirewall,\n sentry: sentryFirewall,\n serpapi: serpapiFirewall,\n shortio: shortioFirewall,\n similarweb: similarwebFirewall,\n slack: slackFirewall,\n strava: stravaFirewall,\n stripe: stripeFirewall,\n supabase: supabaseFirewall,\n supadata: supadataFirewall,\n tavily: tavilyFirewall,\n tldv: tldvFirewall,\n todoist: todoistFirewall,\n v0: v0Firewall,\n vercel: vercelFirewall,\n webflow: webflowFirewall,\n wix: wixFirewall,\n x: xFirewall,\n xero: xeroFirewall,\n youtube: youtubeFirewall,\n zapier: zapierFirewall,\n zapsign: zapsignFirewall,\n zeptomail: zeptomailFirewall,\n};\n","import { type FirewallConfig, type ExpandedFirewallConfig } from \"./firewalls\";\nimport { fetchFirewallConfig, type FetchFn } from \"../firewall-loader\";\n\nexport interface FirewallSelection {\n permissions: string[] | \"all\";\n}\n\nconst VALID_RULE_METHODS = new Set([\n \"GET\",\n \"POST\",\n \"PUT\",\n \"PATCH\",\n \"DELETE\",\n \"HEAD\",\n \"OPTIONS\",\n \"ANY\",\n]);\n\nexport function validateRule(\n rule: string,\n permName: string,\n serviceName: string,\n): void {\n const parts = rule.split(\" \", 2);\n if (parts.length !== 2 || !parts[1]) {\n throw new Error(\n `Invalid rule \"${rule}\" in permission \"${permName}\" of firewall \"${serviceName}\": must be \"METHOD /path\"`,\n );\n }\n const [method, path] = parts as [string, string];\n if (!VALID_RULE_METHODS.has(method)) {\n throw new Error(\n `Invalid rule \"${rule}\" in permission \"${permName}\" of firewall \"${serviceName}\": unknown method \"${method}\" (must be uppercase)`,\n );\n }\n if (!path.startsWith(\"/\")) {\n throw new Error(\n `Invalid rule \"${rule}\" in permission \"${permName}\" of firewall \"${serviceName}\": path must start with \"/\"`,\n );\n }\n if (path.includes(\"?\") || path.includes(\"#\")) {\n throw new Error(\n `Invalid rule \"${rule}\" in permission \"${permName}\" of firewall \"${serviceName}\": path must not contain query string or fragment`,\n );\n }\n const segments = path.split(\"/\").filter(Boolean);\n const paramNames = new Set<string>();\n for (let i = 0; i < segments.length; i++) {\n const seg = segments[i]!;\n if (seg.startsWith(\"{\") && seg.endsWith(\"}\")) {\n const name = seg.slice(1, -1);\n const isGreedy = name.endsWith(\"+\") || name.endsWith(\"*\");\n const baseName = isGreedy ? name.slice(0, -1) : name;\n if (!baseName) {\n throw new Error(\n `Invalid rule \"${rule}\" in permission \"${permName}\" of firewall \"${serviceName}\": empty parameter name`,\n );\n }\n if (paramNames.has(baseName)) {\n throw new Error(\n `Invalid rule \"${rule}\" in permission \"${permName}\" of firewall \"${serviceName}\": duplicate parameter name \"{${baseName}}\"`,\n );\n }\n paramNames.add(baseName);\n if (isGreedy && i !== segments.length - 1) {\n throw new Error(\n `Invalid rule \"${rule}\" in permission \"${permName}\" of firewall \"${serviceName}\": {${name}} must be the last segment`,\n );\n }\n }\n }\n}\n\nexport function validateBaseUrl(base: string, serviceName: string): void {\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 * Collect available permission names from a firewall config.\n * Validates uniqueness and that \"all\" is not used as a permission name.\n */\nexport function collectAndValidatePermissions(\n ref: string,\n serviceConfig: FirewallConfig,\n): Set<string> {\n if (serviceConfig.apis.length === 0) {\n throw new Error(\n `Firewall \"${serviceConfig.name}\" (ref \"${ref}\") has no api entries`,\n );\n }\n const available = new Set<string>();\n for (const api of serviceConfig.apis) {\n validateBaseUrl(api.base, serviceConfig.name);\n if (!api.permissions || api.permissions.length === 0) {\n throw new Error(\n `API entry \"${api.base}\" in firewall \"${serviceConfig.name}\" (ref \"${ref}\") has no permissions`,\n );\n }\n // Uniqueness is enforced within a single api_entry. The same permission\n // name across different api_entries is allowed (e.g., \"full-access\" on\n // both slack.com/api and files.slack.com).\n const seen = new Set<string>();\n for (const perm of api.permissions) {\n if (!perm.name) {\n throw new Error(\n `Firewall \"${serviceConfig.name}\" (ref \"${ref}\") has a permission with empty name`,\n );\n }\n if (perm.name === \"all\") {\n throw new Error(\n `Firewall \"${serviceConfig.name}\" (ref \"${ref}\") has a permission named \"all\", which is a reserved keyword`,\n );\n }\n if (seen.has(perm.name)) {\n throw new Error(\n `Duplicate permission name \"${perm.name}\" in API entry \"${api.base}\" of firewall \"${serviceConfig.name}\" (ref \"${ref}\")`,\n );\n }\n if (perm.rules.length === 0) {\n throw new Error(\n `Permission \"${perm.name}\" in firewall \"${serviceConfig.name}\" (ref \"${ref}\") has no rules`,\n );\n }\n for (const rule of perm.rules) {\n validateRule(rule, perm.name, serviceConfig.name);\n }\n seen.add(perm.name);\n available.add(perm.name);\n }\n }\n return available;\n}\n\n/**\n * Expand experimental_firewalls from map format to ExpandedFirewallConfig[] in-place.\n * Validates permission names and filters api_entries to only include selected permissions.\n * Mutates the config object so the API receives pre-expanded firewall objects.\n *\n * Input (from vm0.yaml): Record<ref, { permissions: string[] | \"all\" }>\n * Output (for API): ExpandedFirewallConfig[]\n *\n * The union type in the `as` cast covers both shapes since this function\n * transforms the field from one to the other. Already-expanded arrays are\n * skipped via the Array.isArray guard.\n *\n * Supports GitHub-hosted YAML configs (by bare name or full GitHub URL).\n *\n * @param config - Compose config object to mutate\n * @param fetchFn - Optional fetch function for HTTP requests (injectable for tests)\n */\nexport async function expandFirewallConfigs(\n config: unknown,\n fetchFn?: FetchFn,\n): Promise<void> {\n const compose = config as {\n agents?: Record<\n string,\n {\n experimental_firewalls?:\n | Record<string, FirewallSelection>\n | ExpandedFirewallConfig[];\n }\n >;\n };\n if (!compose?.agents) return;\n\n for (const agent of Object.values(compose.agents)) {\n const configs = agent.experimental_firewalls;\n if (!configs) continue;\n // Skip if already expanded (array, not map)\n if (Array.isArray(configs)) continue;\n\n const expanded: ExpandedFirewallConfig[] = [];\n\n // Resolve all firewall configs in parallel\n const entries = Object.entries(configs);\n const resolvedConfigs = await Promise.all(\n entries.map(([ref]) => fetchFirewallConfig(ref, fetchFn)),\n );\n\n for (let i = 0; i < entries.length; i++) {\n const [ref, selection] = entries[i]!;\n const serviceConfig = resolvedConfigs[i]!;\n const availablePermissions = collectAndValidatePermissions(\n ref,\n serviceConfig,\n );\n\n // Validate selected permissions exist\n if (selection.permissions !== \"all\") {\n for (const name of selection.permissions) {\n if (!availablePermissions.has(name)) {\n const available = [...availablePermissions].join(\", \");\n throw new Error(\n `Permission \"${name}\" does not exist in firewall \"${serviceConfig.name}\" (ref \"${ref}\"). Available: ${available}`,\n );\n }\n }\n }\n\n // Filter api_entries: keep only selected permissions, drop empty entries\n const selectedSet =\n selection.permissions === \"all\" ? null : new Set(selection.permissions);\n\n const filteredApis = serviceConfig.apis\n .map((api) => ({\n ...api,\n permissions: selectedSet\n ? (api.permissions ?? []).filter((p) => selectedSet.has(p.name))\n : api.permissions,\n }))\n .filter((api) => (api.permissions ?? []).length > 0);\n\n // Drop firewall config entirely if no api_entries remain\n if (filteredApis.length === 0) continue;\n\n const entry: ExpandedFirewallConfig = {\n name: serviceConfig.name,\n ref,\n apis: filteredApis,\n };\n if (serviceConfig.description !== undefined)\n entry.description = serviceConfig.description;\n if (serviceConfig.placeholders !== undefined)\n entry.placeholders = serviceConfig.placeholders;\n expanded.push(entry);\n }\n\n agent.experimental_firewalls = expanded;\n }\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\";\nimport { firewallPermissionSchema } from \"./firewalls\";\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(\n (val) =>\n !val.includes(\"..\") && !val.startsWith(\"/\") && !val.startsWith(\"\\\\\"),\n \"Instructions path must be a relative path without '..' segments\",\n )\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 org/name format (e.g., acme/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 * CLI input: map format { slack: { permissions: [...] | \"all\" } }\n * — expanded by CLI to full ExpandedFirewallConfig[] before API call.\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 * Expanded firewall config schema (after CLI expansion)\n */\nconst expandedFirewallConfigSchema = z.object({\n name: z.string(),\n ref: z.string(),\n description: z.string().optional(),\n apis: z.array(\n 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 placeholders: z.record(z.string(), z.string()).optional(),\n});\n\n/**\n * Agent compose content schema for API requests.\n * Same as agentComposeContentSchema but experimental_firewalls is pre-expanded by CLI.\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 experimental_firewalls: z.array(expandedFirewallConfigSchema).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 org: z.string().optional(),\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 * If org is not provided, uses the authenticated user's default org\n */\n list: {\n method: \"GET\",\n path: \"/api/agent/composes/list\",\n headers: authHeadersSchema,\n query: z.object({\n org: z.string().optional(),\n }),\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 { 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\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 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\";\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]);\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 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 triggerSource: triggerSourceSchema.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 org: z.string().optional(),\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) => s.toLowerCase());\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?org={slug}\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 org: z.string().optional(),\n }),\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 email: z.string(),\n role: orgRoleSchema,\n createdAt: z.string(),\n});\nexport type OrgPendingInvitation = z.infer<typeof orgPendingInvitationSchema>;\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 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 * 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 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 * Providers excluded from static firewall configs.\n * = hidden providers (dynamic URLs / SigV4) + vm0 (meta-provider).\n *\n * Adding a new provider to MODEL_PROVIDER_TYPES without either adding it here\n * or adding a firewall config entry will cause a compile error.\n */\ntype FirewallExcludedProvider = HiddenProviderType | \"vm0\";\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) => !HIDDEN_PROVIDER_TYPES.has(type),\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\nfunction mpFirewall(\n type: ModelProviderType,\n authHeaders: Record<string, string>,\n placeholders: Record<string, string>,\n): ExpandedFirewallConfig {\n return {\n name: `model-provider:${type}`,\n ref: \"__auto__\",\n apis: [\n {\n base: getFirewallBaseUrl(type),\n auth: { headers: authHeaders },\n permissions: [{ name: \"unrestricted\", rules: [\"ANY /{path*}\"] }],\n },\n ],\n placeholders,\n };\n}\n\n/**\n * Every provider NOT in FirewallExcludedProvider 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 Exclude<ModelProviderType, FirewallExcludedProvider>,\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 { \"x-api-key\": \"${{ secrets.ANTHROPIC_API_KEY }}\" },\n {\n ANTHROPIC_API_KEY:\n \"sk-ant-api03-vm0placeholder0000000000000000000000000000000000000000000000000000000000000000000000000000000AA\",\n },\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 { Authorization: \"Bearer ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}\" },\n {\n CLAUDE_CODE_OAUTH_TOKEN:\n \"sk-ant-oat01-vm0placeholder0000000000000000000000000000000000000000000000000000000000000000000000000000000AA\",\n },\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 { Authorization: \"Bearer ${{ secrets.OPENROUTER_API_KEY }}\" },\n {\n OPENROUTER_API_KEY:\n \"sk-or-v1-vm0placeholder00000000000000000000000000000000000000000000000000\",\n },\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 { Authorization: \"Bearer ${{ secrets.MOONSHOT_API_KEY }}\" },\n { MOONSHOT_API_KEY: \"sk-vm0placeholder000000000000000000\" },\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 { Authorization: \"Bearer ${{ secrets.MINIMAX_API_KEY }}\" },\n { MINIMAX_API_KEY: \"eyvm0placeholder000000000000000000000000000000000000\" },\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 { Authorization: \"Bearer ${{ secrets.DEEPSEEK_API_KEY }}\" },\n { DEEPSEEK_API_KEY: \"sk-vm0placeholder000000000000000000\" },\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 { Authorization: \"Bearer ${{ secrets.ZAI_API_KEY }}\" },\n { ZAI_API_KEY: \"sk-vm0placeholder000000000000000000\" },\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 { Authorization: \"Bearer ${{ secrets.VERCEL_AI_GATEWAY_API_KEY }}\" },\n { VERCEL_AI_GATEWAY_API_KEY: \"sk-vm0placeholder000000000000000000\" },\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 */\ntype FirewallSupportedProvider = Exclude<\n ModelProviderType,\n FirewallExcludedProvider\n>;\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\";\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(z.string()).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 * Session messages route contract (/api/agent/sessions/[id]/messages)\n */\nexport const sessionMessagesContract = c.router({\n /**\n * POST /api/agent/sessions/:id/messages\n * Append chat messages to a session\n */\n append: {\n method: \"POST\",\n path: \"/api/agent/sessions/:id/messages\",\n headers: authHeadersSchema,\n pathParams: z.object({\n id: z.string().min(1, \"Session ID is required\"),\n }),\n body: z.object({\n messages: z.array(\n z.object({\n role: z.enum([\"user\", \"assistant\"]),\n content: z.string(),\n runId: z.string().optional(),\n }),\n ),\n }),\n responses: {\n 200: z.object({ success: z.literal(true) }),\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Append chat messages to a session\",\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 SessionMessagesContract = typeof sessionMessagesContract;\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\";\n\nconst c = initContract();\n\nconst chatThreadListItemSchema = z.object({\n id: z.string(),\n title: z.string().nullable(),\n preview: z.string().nullable(),\n agentId: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\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(z.string()).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});\n\n/**\n * Chat thread runs route contract (/api/chat-threads/[id]/runs)\n */\nexport const chatThreadRunsContract = c.router({\n addRun: {\n method: \"POST\",\n path: \"/api/zero/chat-threads/:id/runs\",\n headers: authHeadersSchema,\n pathParams: z.object({ id: z.string() }),\n body: z.object({\n runId: z.string().min(1),\n }),\n responses: {\n 204: c.noBody(),\n 401: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Associate a run to a chat thread\",\n },\n});\n\nexport type ChatThreadsContract = typeof chatThreadsContract;\nexport type ChatThreadByIdContract = typeof chatThreadByIdContract;\nexport type ChatThreadRunsContract = typeof chatThreadRunsContract;\n\nexport { chatThreadListItemSchema, chatThreadDetailSchema };\n\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: org/name (e.g., \"acme/production\")\n */\nexport const runnerGroupSchema = z\n .string()\n .regex(\n /^[a-z0-9-]+\\/[a-z0-9-]+$/,\n \"Runner group must be in org/name format (e.g., acme/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 *\n * `environmentMapping` lives here because it only applies to the OAuth path:\n * OAuth stores secrets under internal names (e.g. `FIGMA_ACCESS_TOKEN`) that\n * need to be mapped to the env var names skills expect (e.g. `FIGMA_TOKEN`).\n * API-token connectors store secrets directly under the target name, so they\n * don't need any mapping.\n *\n * `$secrets.X` in mapping values looks up secret X from the connector's secrets.\n */\nexport interface ConnectorOAuthConfig {\n authorizationUrl?: string;\n tokenUrl: string;\n scopes: string[];\n environmentMapping: Record<string, string>;\n}\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: Record<string, ConnectorAuthMethodConfig>;\n readonly defaultAuthMethod?: string;\n /** Non-OAuth environment mapping (e.g. computer connector bridge credentials). */\n readonly bridgeMapping?: Record<string, string>;\n readonly oauth?: ConnectorOAuthConfig;\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 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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n ahrefs: {\n label: \"Ahrefs\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n AHREFS_TOKEN: \"$secrets.AHREFS_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n agentmail: {\n label: \"AgentMail\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n airtable: {\n label: \"Airtable\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n AIRTABLE_TOKEN: \"$secrets.AIRTABLE_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n github: {\n label: \"GitHub\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n GH_TOKEN: \"$secrets.GITHUB_ACCESS_TOKEN\",\n GITHUB_TOKEN: \"$secrets.GITHUB_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n notion: {\n label: \"Notion\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n NOTION_TOKEN: \"$secrets.NOTION_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n gmail: {\n label: \"Gmail\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n GMAIL_TOKEN: \"$secrets.GMAIL_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n \"google-sheets\": {\n label: \"Google Sheets\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n GOOGLE_SHEETS_TOKEN: \"$secrets.GOOGLE_SHEETS_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n \"google-docs\": {\n label: \"Google Docs\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n GOOGLE_DOCS_TOKEN: \"$secrets.GOOGLE_DOCS_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n \"google-drive\": {\n label: \"Google Drive\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n GOOGLE_DRIVE_TOKEN: \"$secrets.GOOGLE_DRIVE_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n \"google-calendar\": {\n label: \"Google Calendar\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n GOOGLE_CALENDAR_TOKEN: \"$secrets.GOOGLE_CALENDAR_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n close: {\n label: \"Close\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n CLOSE_TOKEN: \"$secrets.CLOSE_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n \"hugging-face\": {\n label: \"Hugging Face\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n hume: {\n label: \"Hume\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n heygen: {\n label: \"HeyGen\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n hubspot: {\n label: \"HubSpot\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n HUBSPOT_TOKEN: \"$secrets.HUBSPOT_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n computer: {\n label: \"Computer\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api\",\n bridgeMapping: {\n COMPUTER_CONNECTOR_BRIDGE_TOKEN:\n \"$secrets.COMPUTER_CONNECTOR_BRIDGE_TOKEN\",\n COMPUTER_CONNECTOR_DOMAIN: \"$secrets.COMPUTER_CONNECTOR_DOMAIN\",\n },\n },\n slack: {\n label: \"Slack\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n SLACK_TOKEN: \"$secrets.SLACK_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n docusign: {\n label: \"DocuSign\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n DOCUSIGN_TOKEN: \"$secrets.DOCUSIGN_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n dropbox: {\n label: \"Dropbox\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n DROPBOX_TOKEN: \"$secrets.DROPBOX_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n linear: {\n label: \"Linear\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n LINEAR_TOKEN: \"$secrets.LINEAR_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n intercom: {\n label: \"Intercom\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n instantly: {\n label: \"Instantly\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n jam: {\n label: \"Jam\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n jira: {\n label: \"Jira\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n jotform: {\n label: \"Jotform\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n kommo: {\n label: \"Kommo\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n line: {\n label: \"LINE\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n loops: {\n label: \"Loops\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n make: {\n label: \"Make\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n metabase: {\n label: \"Metabase\",\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 },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n deel: {\n label: \"Deel\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n DEEL_TOKEN: \"$secrets.DEEL_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n deepseek: {\n label: \"DeepSeek\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n clickup: {\n label: \"ClickUp\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n cloudflare: {\n label: \"Cloudflare\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n cloudinary: {\n label: \"Cloudinary\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n cronlytic: {\n label: \"Cronlytic\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n \"customer-io\": {\n label: \"Customer.io\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n dify: {\n label: \"Dify\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n figma: {\n label: \"Figma\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n FIGMA_TOKEN: \"$secrets.FIGMA_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n mercury: {\n label: \"Mercury\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n MERCURY_TOKEN: \"$secrets.MERCURY_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n minimax: {\n label: \"MiniMax\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n reportei: {\n label: \"Reportei\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n serpapi: {\n label: \"SerpApi\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n salesforce: {\n label: \"Salesforce\",\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 },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n reddit: {\n label: \"Reddit\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n REDDIT_TOKEN: \"$secrets.REDDIT_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n strava: {\n label: \"Strava\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n STRAVA_TOKEN: \"$secrets.STRAVA_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n x: {\n label: \"X\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n X_TOKEN: \"$secrets.X_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n neon: {\n label: \"Neon\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n NEON_TOKEN: \"$secrets.NEON_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n \"garmin-connect\": {\n label: \"Garmin Connect\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n GARMIN_CONNECT_TOKEN: \"$secrets.GARMIN_CONNECT_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n vercel: {\n label: \"Vercel\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n tokenUrl: \"https://api.vercel.com/v2/oauth/access_token\",\n scopes: [],\n environmentMapping: {\n VERCEL_TOKEN: \"$secrets.VERCEL_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n sentry: {\n label: \"Sentry\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n SENTRY_TOKEN: \"$secrets.SENTRY_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n posthog: {\n label: \"PostHog\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n POSTHOG_TOKEN: \"$secrets.POSTHOG_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n productlane: {\n label: \"Productlane\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n \"intervals-icu\": {\n label: \"Intervals.icu\",\n featureFlag: FeatureSwitchKey.IntervalsIcuConnector,\n helpText:\n \"Connect your Intervals.icu account to access training, activity, wellness, and calendar data\",\n authMethods: {\n oauth: {\n label: \"OAuth (Recommended)\",\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 \"api-token\": {\n label: \"API Key\",\n secrets: {\n INTERVALS_ICU_TOKEN: {\n label: \"API Key\",\n required: true,\n },\n },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n INTERVALS_ICU_TOKEN: \"$secrets.INTERVALS_ICU_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n monday: {\n label: \"Monday.com\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n MONDAY_TOKEN: \"$secrets.MONDAY_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n calendly: {\n label: \"Calendly\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n canva: {\n label: \"Canva\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n CANVA_TOKEN: \"$secrets.CANVA_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n \"cal-com\": {\n label: \"Cal.com\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n xero: {\n label: \"Xero\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n XERO_TOKEN: \"$secrets.XERO_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n supabase: {\n label: \"Supabase\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n SUPABASE_TOKEN: \"$secrets.SUPABASE_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n todoist: {\n label: \"Todoist\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n TODOIST_TOKEN: \"$secrets.TODOIST_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n webflow: {\n label: \"Webflow\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n WEBFLOW_TOKEN: \"$secrets.WEBFLOW_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n wrike: {\n label: \"Wrike\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n \"outlook-mail\": {\n label: \"Outlook Mail\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n OUTLOOK_MAIL_TOKEN: \"$secrets.OUTLOOK_MAIL_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n \"outlook-calendar\": {\n label: \"Outlook Calendar\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n OUTLOOK_CALENDAR_TOKEN: \"$secrets.OUTLOOK_CALENDAR_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n asana: {\n label: \"Asana\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"oauth\",\n oauth: {\n authorizationUrl: \"https://app.asana.com/-/oauth_authorize\",\n tokenUrl: \"https://app.asana.com/-/oauth_token\",\n scopes: [],\n environmentMapping: {\n ASANA_TOKEN: \"$secrets.ASANA_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n atlassian: {\n label: \"Atlassian (Jira/Confluence)\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n \"meta-ads\": {\n label: \"Meta Ads\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n META_ADS_TOKEN: \"$secrets.META_ADS_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n stripe: {\n label: \"Stripe\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 environmentMapping: {\n STRIPE_TOKEN: \"$secrets.STRIPE_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n openai: {\n label: \"OpenAI\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n similarweb: {\n label: \"SimilarWeb\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n perplexity: {\n label: \"Perplexity\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n plausible: {\n label: \"Plausible\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n mailchimp: {\n label: \"Mailchimp\",\n featureFlag: FeatureSwitchKey.MailchimpConnector,\n helpText:\n \"Connect your Mailchimp account to manage audiences, campaigns, templates, and automations\",\n authMethods: {\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n oauth: {\n authorizationUrl: \"https://login.mailchimp.com/oauth2/authorize\",\n tokenUrl: \"https://login.mailchimp.com/oauth2/token\",\n scopes: [],\n environmentMapping: {\n MAILCHIMP_TOKEN: \"$secrets.MAILCHIMP_ACCESS_TOKEN\",\n },\n } as ConnectorOAuthConfig,\n },\n chatwoot: {\n label: \"Chatwoot\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n resend: {\n label: \"Resend\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n revenuecat: {\n label: \"RevenueCat\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n pdf4me: {\n label: \"PDF4me\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n apify: {\n label: \"Apify\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n bitrix: {\n label: \"Bitrix24\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n brevo: {\n label: \"Brevo\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n \"brave-search\": {\n label: \"Brave Search\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n \"bright-data\": {\n label: \"Bright Data\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n browserbase: {\n label: \"Browserbase\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n browserless: {\n label: \"Browserless\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n fireflies: {\n label: \"Fireflies\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n firecrawl: {\n label: \"Firecrawl\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n scrapeninja: {\n label: \"ScrapeNinja\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n pdfco: {\n label: \"PDF.co\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n elevenlabs: {\n label: \"ElevenLabs\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n explorium: {\n label: \"Explorium\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n devto: {\n label: \"Dev.to\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n fal: {\n label: \"fal.ai\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n granola: {\n label: \"Granola\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n podchaser: {\n label: \"Podchaser\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n pushinator: {\n label: \"Pushinator\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n qdrant: {\n label: \"Qdrant\",\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 },\n },\n } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n qiita: {\n label: \"Qiita\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n zeptomail: {\n label: \"ZeptoMail\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n runway: {\n label: \"Runway\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n shortio: {\n label: \"Short.io\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n streak: {\n label: \"Streak\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n supadata: {\n label: \"Supadata\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n tavily: {\n label: \"Tavily\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n tldv: {\n label: \"tl;dv\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n twenty: {\n label: \"Twenty\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n youtube: {\n label: \"YouTube\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n zapier: {\n label: \"Zapier\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n zapsign: {\n label: \"ZapSign\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n zendesk: {\n label: \"Zendesk\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n htmlcsstoimage: {\n label: \"HTML/CSS to Image\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n imgur: {\n label: \"Imgur\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n instagram: {\n label: \"Instagram\",\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_ACCESS_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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n \"prisma-postgres\": {\n label: \"Prisma Postgres\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n discord: {\n label: \"Discord\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n lark: {\n label: \"Lark\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n mailsac: {\n label: \"Mailsac\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n minio: {\n label: \"MinIO\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n pdforge: {\n label: \"PDForge\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n \"discord-webhook\": {\n label: \"Discord Webhook\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n \"slack-webhook\": {\n label: \"Slack Webhook\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n gitlab: {\n label: \"GitLab\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n wix: {\n label: \"Wix\",\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 } as Record<string, ConnectorAuthMethodConfig>,\n defaultAuthMethod: \"api-token\",\n },\n v0: {\n label: \"v0\",\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 } as Record<string, ConnectorAuthMethodConfig>,\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 \"agentmail\",\n \"ahrefs\",\n \"atlassian\",\n \"axiom\",\n \"airtable\",\n \"asana\",\n \"calendly\",\n \"canva\",\n \"clickup\",\n \"cloudflare\",\n \"cloudinary\",\n \"close\",\n \"github\",\n \"gmail\",\n \"google-sheets\",\n \"hugging-face\",\n \"hume\",\n \"heygen\",\n \"hubspot\",\n \"google-docs\",\n \"google-drive\",\n \"google-calendar\",\n \"notion\",\n \"computer\",\n \"slack\",\n \"deel\",\n \"deepseek\",\n \"dify\",\n \"docusign\",\n \"dropbox\",\n \"linear\",\n \"intercom\",\n \"jam\",\n \"jotform\",\n \"line\",\n \"make\",\n \"metabase\",\n \"figma\",\n \"mercury\",\n \"minimax\",\n \"reddit\",\n \"strava\",\n \"neon\",\n \"garmin-connect\",\n \"x\",\n \"vercel\",\n \"sentry\",\n \"intervals-icu\",\n \"xero\",\n \"monday\",\n \"supabase\",\n \"todoist\",\n \"webflow\",\n \"outlook-mail\",\n \"outlook-calendar\",\n \"meta-ads\",\n \"posthog\",\n \"stripe\",\n \"openai\",\n \"chatwoot\",\n \"similarweb\",\n \"mailchimp\",\n \"pdfco\",\n \"perplexity\",\n \"plausible\",\n \"productlane\",\n \"resend\",\n \"revenuecat\",\n \"pdf4me\",\n \"apify\",\n \"bright-data\",\n \"browserbase\",\n \"browserless\",\n \"fireflies\",\n \"firecrawl\",\n \"scrapeninja\",\n \"elevenlabs\",\n \"explorium\",\n \"devto\",\n \"fal\",\n \"granola\",\n \"podchaser\",\n \"pushinator\",\n \"qdrant\",\n \"qiita\",\n \"reportei\",\n \"serpapi\",\n \"zeptomail\",\n \"runway\",\n \"salesforce\",\n \"shortio\",\n \"streak\",\n \"supadata\",\n \"tavily\",\n \"tldv\",\n \"twenty\",\n \"youtube\",\n \"wrike\",\n \"zapier\",\n \"zapsign\",\n \"zendesk\",\n \"prisma-postgres\",\n \"bitrix\",\n \"brave-search\",\n \"cronlytic\",\n \"discord\",\n \"discord-webhook\",\n \"gitlab\",\n \"htmlcsstoimage\",\n \"imgur\",\n \"instantly\",\n \"instagram\",\n \"jira\",\n \"kommo\",\n \"lark\",\n \"mailsac\",\n \"minio\",\n \"pdforge\",\n \"slack-webhook\",\n \"wix\",\n \"cal-com\",\n \"v0\",\n \"brevo\",\n \"customer-io\",\n \"loops\",\n]);\n\n/**\n * Get auth methods for a connector type\n */\nexport function getConnectorAuthMethods(\n type: ConnectorType,\n): Record<string, 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): string | 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: string,\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: string,\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 *\n * For OAuth connectors, reads from `oauth.environmentMapping`.\n * For special connectors (e.g. computer), reads from `bridgeMapping`.\n */\nexport function getConnectorEnvironmentMapping(\n type: ConnectorType,\n): Record<string, string> {\n const config = CONNECTOR_TYPES[type];\n return config.oauth?.environmentMapping ?? config.bridgeMapping ?? {};\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]) => valueRef === `$secrets.${secretName}`)\n .map(([envVar]) => envVar);\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) => storedSet.has(s));\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) => !storedSet.has(s)),\n removedScopes: stored.filter((s) => !currentSet.has(s)),\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]) => cfg.required)\n .map(([name]) => name);\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) => userSecretNames.has(name));\n const variablesOk = fields.variables.every((name) => varNames.has(name));\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","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 data.timezone !== undefined ||\n data.pinnedAgentIds !== undefined ||\n data.sendMode !== undefined,\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 vm0_secrets: z.array(z.string()).optional(),\n vm0_vars: z.array(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 * 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 connectors: z.array(z.string()),\n firewallPolicies: firewallPoliciesSchema.nullable(),\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 connectors: z.array(z.string()),\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});\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 },\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// 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;\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 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});\n\nexport type ZeroOrgInviteContract = typeof zeroOrgInviteContract;\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 org: z.string().optional(),\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 org: z.string().optional(),\n }),\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// 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;\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 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 artifactName: z.string().nullable(),\n artifactVersion: 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 slackChannelId: 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 artifactName: z.string().optional(),\n artifactVersion: 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 slackChannelId: z.string().nullable().optional(),\n })\n .refine(\n (data) => {\n const triggers = [\n data.cronExpression,\n data.atTime,\n data.intervalSeconds,\n ].filter((v) => v !== undefined);\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 billingStatusResponseSchema = z.object({\n tier: z.string(),\n credits: z.number(),\n subscriptionStatus: z.string().nullable(),\n currentPeriodEnd: z.string().nullable(),\n hasSubscription: z.boolean(),\n autoRecharge: autoRechargeSchema,\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// 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>;\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});\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 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});\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","/**\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 * 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.map((b) => b.toString(16).padStart(2, \"0\")).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: false,\n enabledUserHashes: STAFF_USER_HASHES,\n enabledOrgIdHashes: STAFF_ORG_ID_HASHES,\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.IntervalsIcuConnector]: {\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.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};\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 && switches.some((s) => s.enabledUserHashes?.length)\n ? await sha1(ctx.userId)\n : undefined,\n emailHash:\n ctx?.email && switches.some((s) => s.enabledEmailHashes?.length)\n ? await sha1(ctx.email.toLowerCase())\n : undefined,\n orgIdHash:\n ctx?.orgId && switches.some((s) => s.enabledOrgIdHashes?.length)\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\";\nimport { resolveSkillRef, parseGitHubTreeUrl } from \"./github-url\";\n\n/**\n * Parsed skill frontmatter from SKILL.md\n */\nexport interface SkillFrontmatter {\n name?: string;\n description?: string;\n vm0_secrets?: string[];\n vm0_vars?: 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 vm0_secrets: Array.isArray(data.vm0_secrets)\n ? data.vm0_secrets.filter((s): s is string => typeof s === \"string\")\n : undefined,\n vm0_vars: Array.isArray(data.vm0_vars)\n ? data.vm0_vars.filter((s): s is string => typeof s === \"string\")\n : undefined,\n };\n}\n\n/**\n * Sync skill-declared environment variables with an agent's environment.\n *\n * - Adds `${{ secrets.X }}` / `${{ vars.X }}` entries for skill-declared vars\n * that are missing from the environment.\n * - Removes entries that were previously added by skills (detected by the\n * self-referencing template pattern `KEY = ${{ secrets.KEY }}`) but are no\n * longer declared by any current skill.\n *\n * @param skills - Array of skill GitHub tree URLs\n * @param environment - Current agent environment (mutated in place)\n */\nexport async function mergeSkillEnvironment(\n skills: string[],\n environment: Record<string, string>,\n): Promise<void> {\n const skillDeclared = await collectSkillDeclaredVars(skills);\n\n // Remove stale skill-added entries that are no longer declared by any skill.\n // Skill-added entries have a self-referencing template pattern:\n // KEY = \"${{ secrets.KEY }}\" or KEY = \"${{ vars.KEY }}\"\n for (const key of Object.keys(environment)) {\n const value = environment[key];\n const isSkillAdded =\n value === `\\${{ secrets.${key} }}` || value === `\\${{ vars.${key} }}`;\n if (isSkillAdded && !skillDeclared.has(key)) {\n delete environment[key];\n }\n }\n\n // Add missing entries for current skills\n for (const [name, source] of skillDeclared) {\n if (!(name in environment)) {\n environment[name] =\n source === \"secret\"\n ? `\\${{ secrets.${name} }}`\n : `\\${{ vars.${name} }}`;\n }\n }\n}\n\n/**\n * Collect all env var names declared by the given skills.\n * Returns a map of name → \"secret\" | \"var\".\n */\nasync function collectSkillDeclaredVars(\n skills: string[],\n): Promise<Map<string, \"secret\" | \"var\">> {\n const declared = new Map<string, \"secret\" | \"var\">();\n const results = await Promise.allSettled(\n skills.map((url) => fetchSkillMdContent(url)),\n );\n\n for (const result of results) {\n if (result.status !== \"fulfilled\" || !result.value) {\n continue;\n }\n const fm = parseSkillFrontmatter(result.value);\n if (fm.vm0_secrets) {\n for (const name of fm.vm0_secrets) {\n declared.set(name, \"secret\");\n }\n }\n if (fm.vm0_vars) {\n for (const name of fm.vm0_vars) {\n declared.set(name, \"var\");\n }\n }\n }\n\n return declared;\n}\n\n/**\n * Build the raw GitHub URL for a skill's SKILL.md file.\n * Accepts bare skill names (e.g. \"slack\") or full GitHub tree URLs.\n */\nfunction buildSkillMdUrl(url: string): string | null {\n const resolved = resolveSkillRef(url);\n\n const parsed = parseGitHubTreeUrl(resolved);\n if (!parsed) {\n return null;\n }\n const pathPrefix = parsed.path ? `${parsed.path}/` : \"\";\n return `https://raw.githubusercontent.com/${parsed.owner}/${parsed.repo}/${parsed.branch}/${pathPrefix}SKILL.md`;\n}\n\n/**\n * Fetch the raw SKILL.md content from a GitHub skill URL.\n * Returns null if the URL is invalid or the fetch fails.\n */\nasync function fetchSkillMdContent(skillUrl: string): Promise<string | null> {\n const rawUrl = buildSkillMdUrl(skillUrl);\n if (!rawUrl) {\n return null;\n }\n const res = await fetch(rawUrl);\n if (!res.ok) {\n return null;\n }\n return res.text();\n}\n\n/**\n * Fetch and parse SKILL.md frontmatter from a GitHub skill URL.\n * Returns null if the URL is invalid or the fetch fails.\n */\nexport async function fetchSkillFrontmatter(\n skillUrl: string,\n): Promise<SkillFrontmatter | null> {\n const content = await fetchSkillMdContent(skillUrl);\n if (!content) {\n return null;\n }\n return parseSkillFrontmatter(content);\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 { tsRestFetchApi } from \"@ts-rest/core\";\nimport { getApiUrl, getActiveToken, getActiveOrg } from \"../config\";\nimport { decodeCliTokenPayload } from \"../cli-token\";\nimport { decodeZeroTokenPayload } from \"../zero-token\";\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 * Get authentication headers for API requests\n */\nasync function getHeaders(): Promise<Record<string, string>> {\n const token = await getActiveToken();\n if (!token) {\n throw new ApiRequestError(\"Not authenticated\", \"UNAUTHORIZED\", 401);\n }\n\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 baseHeaders = await getHeaders();\n\n // Check if current token is a self-signed JWT with embedded orgId\n const token = await getActiveToken();\n const isJwtToken =\n decodeCliTokenPayload(token) ?? decodeZeroTokenPayload(token);\n\n if (isJwtToken) {\n // JWT tokens carry orgId in payload — server extracts it from authCtx.orgId\n return { baseUrl, baseHeaders, jsonQuery: false as const };\n }\n\n // Legacy opaque tokens: inject ?org= query parameter\n const activeOrg = await getActiveOrg();\n if (!activeOrg) {\n throw new Error(\n \"No active organization configured. Run: zero org use <slug>\",\n );\n }\n\n return {\n baseUrl,\n baseHeaders,\n jsonQuery: false as const,\n api: async (args: Parameters<typeof tsRestFetchApi>[0]) => {\n const [pathPart, queryPart] = args.path.split(\"?\");\n const params = new URLSearchParams(queryPart ?? \"\");\n if (!params.has(\"org\")) {\n params.set(\"org\", activeOrg);\n }\n args.path = params.toString()\n ? `${pathPart}?${params.toString()}`\n : pathPart!;\n return tsRestFetchApi(args);\n },\n };\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 { getClientConfig, handleError } 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 org?: 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, org },\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\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 {\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 (vm0_live_),\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: { authorization: `Bearer ${(await getToken())!}` },\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 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 runsMainContract,\n runEventsContract,\n runsCancelContract,\n runsQueueContract,\n type RunsListResponse,\n type CancelRunResponse,\n type QueueResponse,\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 // 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 { 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 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 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 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 { getComposeByName } 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 artifactName?: string;\n artifactVersion?: string;\n volumeVersions?: Record<string, string>;\n enabled?: boolean;\n notifyEmail?: boolean;\n notifySlack?: boolean;\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 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 agentName: string,\n scheduleName?: string,\n): Promise<ScheduleResponse> {\n const compose = await getComposeByName(agentName);\n if (!compose) {\n throw new Error(`Agent not found: ${agentName}`);\n }\n\n const { schedules } = await listZeroSchedules();\n\n const agentSchedules = schedules.filter((s) => s.agentId === compose.id);\n\n if (agentSchedules.length === 0) {\n throw new Error(`No schedule found for agent \"${agentName}\"`);\n }\n\n if (scheduleName) {\n const match = agentSchedules.find((s) => s.name === scheduleName);\n if (!match) {\n const available = agentSchedules.map((s) => s.name).join(\", \");\n throw new Error(\n `Schedule \"${scheduleName}\" not found for agent \"${agentName}\". 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.map((s) => s.name).join(\", \");\n throw new Error(\n `Agent \"${agentName}\" has multiple schedules. Use --name to specify which one: ${available}`,\n );\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"],"mappings":"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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,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,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;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CF;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,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,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,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;AA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E,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,cAAc;AAAA,QACxB;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,yDAAyD;AAAA,QACnE;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACnsDO,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;AAAA,QACX;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,cAAc;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACvBO,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,aAAa;AAAA,UACb,OAAO,CAAC,cAAc;AAAA,QACxB;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,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;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,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,cAAc;AAAA,QACxB;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;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AA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AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,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;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,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,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,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,mBAAmB;AAAA,QAC7B;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,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,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACpSO,IAAM,qBAAqC;AAAA,EAChD,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,IACZ,mBACE;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,CAAC,cAAc;AAAA,QACxB;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,aAAa;AAAA,UACb,OAAO,CAAC,gCAAgC;AAAA,QAC1C;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,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,gCAAgC;AAAA,QAC1C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AC/DO,IAAM,sBAAsC;AAAA,EACjD,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,IACZ,oBACE;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,CAAC,cAAc;AAAA,QACxB;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,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,MACA,aAAa;AAAA,QACX;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,cAAc;AAAA,QACxB;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,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,kBAAkB,wBAAwB;AAAA,QACpD;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,aAAa;AAAA,UACb,OAAO,CAAC,0BAA0B,0BAA0B;AAAA,QAC9D;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,0BAA0B,0BAA0B;AAAA,QAC9D;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,cAAc;AAAA,QACxB;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,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,kBAAkB,wBAAwB;AAAA,QACpD;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,aAAa;AAAA,UACb,OAAO,CAAC,0BAA0B,0BAA0B;AAAA,QAC9D;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,0BAA0B,0BAA0B;AAAA,QAC9D;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AChvBO,IAAM,uBAAuC;AAAA,EAClD,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,IACZ,qBACE;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,CAAC,cAAc;AAAA,QACxB;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,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,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,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AClHO,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;AAAA,QACX;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,cAAc;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACvBO,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,aAAa;AAAA,QACf;AAAA,MACF;AAAA,MACA,aAAa;AAAA,QACX;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,cAAc;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACvBO,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;AAAA,QACX;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,cAAc;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACvBO,IAAM,sBAAsC;AAAA,EACjD,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,IACZ,oBAAoB;AAAA,EACtB;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,CAAC,cAAc;AAAA,QACxB;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,cAAc;AAAA,QACxB;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,cAAc;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACrDO,IAAM,eAA+B;AAAA,EAC1C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,IACZ,YACE;AAAA,EACJ;AAAA,EACA,MAAM;AAAA,IACJ;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,SAAS;AAAA,UACP,kBAAkB;AAAA,QACpB;AAAA,MACF;AAAA,MACA,aAAa;AAAA,QACX;AAAA,UACE,MAAM;AAAA,UACN,aAAa;AAAA,UACb,OAAO,CAAC,cAAc;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACxBO,IAAM,gBAAgC;AAAA,EAC3C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,IACZ,iBAAiB;AAAA,EACnB;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,CAAC,cAAc;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACvBO,IAAM,oBAAoC;AAAA,EAC/C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,IACZ,wBACE;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,CAAC,cAAc;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACxBO,IAAM,oBAAoC;AAAA,EAC/C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,IACZ,mBAAmB;AAAA,EACrB;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,CAAC,cAAc;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACvBO,IAAM,mBAAmC;AAAA,EAC9C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,IACZ,gBACE;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,CAAC,cAAc;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACxBO,IAAM,uBAAuC;AAAA,EAClD,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,IACZ,qBACE;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,CAAC,cAAc;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACxBO,IAAM,eAA+B;AAAA,EAC1C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,IACZ,iBACE;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,CAAC,cAAc;AAAA,QACxB;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,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,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,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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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;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AAAA,IACF,aAAa;AAAA,MACX,aAAa;AAAA,QACX,OAAO;AAAA,QACP,UACE;AAAA,QACF,SAAS;AAAA,UACP,UAAU;AAAA,YACR,OAAO;AAAA,YACP,UAAU;AAAA,YACV,aAAa;AAAA,UACf;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,mBAAmB;AAAA,EACrB;AACF;AAIO,IAAM,kBACX;AACK,IAAM,sBAAsBC,IAAE,KAAK;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EA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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","c","z","artifactSnapshotSchema","volumeVersionsSnapshotSchema","z","c","z","storedChatMessageSchema","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","c","c","z","c","z","z","z","c","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","z","c","z","z","c","z","z","c","z","parseYaml","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","available"]}
|