@agent-native/core 0.59.0 → 0.60.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/dist/a2a/index.d.ts +2 -0
- package/dist/a2a/index.d.ts.map +1 -1
- package/dist/a2a/index.js +1 -0
- package/dist/a2a/index.js.map +1 -1
- package/dist/a2a/invoke.d.ts +63 -0
- package/dist/a2a/invoke.d.ts.map +1 -0
- package/dist/a2a/invoke.js +157 -0
- package/dist/a2a/invoke.js.map +1 -0
- package/dist/agent/run-store.d.ts +15 -0
- package/dist/agent/run-store.d.ts.map +1 -1
- package/dist/agent/run-store.js +28 -0
- package/dist/agent/run-store.js.map +1 -1
- package/dist/chat-threads/store.d.ts +21 -0
- package/dist/chat-threads/store.d.ts.map +1 -1
- package/dist/chat-threads/store.js +128 -0
- package/dist/chat-threads/store.js.map +1 -1
- package/dist/cli/agent.d.ts +23 -0
- package/dist/cli/agent.d.ts.map +1 -0
- package/dist/cli/agent.js +300 -0
- package/dist/cli/agent.js.map +1 -0
- package/dist/cli/agents.d.ts +14 -0
- package/dist/cli/agents.d.ts.map +1 -0
- package/dist/cli/agents.js +95 -0
- package/dist/cli/agents.js.map +1 -0
- package/dist/cli/code-agent-executor.d.ts.map +1 -1
- package/dist/cli/code-agent-executor.js +264 -2
- package/dist/cli/code-agent-executor.js.map +1 -1
- package/dist/cli/create.d.ts +3 -2
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +154 -83
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/index.js +50 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/invoke.d.ts +26 -0
- package/dist/cli/invoke.d.ts.map +1 -0
- package/dist/cli/invoke.js +227 -0
- package/dist/cli/invoke.js.map +1 -0
- package/dist/cli/templates-meta.d.ts +1 -1
- package/dist/cli/templates-meta.d.ts.map +1 -1
- package/dist/cli/templates-meta.js +9 -8
- package/dist/cli/templates-meta.js.map +1 -1
- package/dist/cli/workspacify.d.ts +1 -1
- package/dist/cli/workspacify.d.ts.map +1 -1
- package/dist/cli/workspacify.js +6 -6
- package/dist/cli/workspacify.js.map +1 -1
- package/dist/client/AgentPanel.js +1 -1
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +8 -2
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/NewWorkspaceAppFlow.d.ts.map +1 -1
- package/dist/client/NewWorkspaceAppFlow.js +5 -4
- package/dist/client/NewWorkspaceAppFlow.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +65 -12
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/blocks/library/diagram.d.ts.map +1 -1
- package/dist/client/blocks/library/diagram.js +23 -17
- package/dist/client/blocks/library/diagram.js.map +1 -1
- package/dist/client/blocks/types.d.ts +2 -0
- package/dist/client/blocks/types.d.ts.map +1 -1
- package/dist/client/blocks/types.js.map +1 -1
- package/dist/client/chat/index.d.ts +1 -1
- package/dist/client/chat/index.d.ts.map +1 -1
- package/dist/client/chat/index.js.map +1 -1
- package/dist/client/extensions/ExtensionViewer.js +1 -1
- package/dist/client/extensions/ExtensionViewer.js.map +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/notifications/NotificationsBell.d.ts +3 -1
- package/dist/client/notifications/NotificationsBell.d.ts.map +1 -1
- package/dist/client/notifications/NotificationsBell.js +7 -3
- package/dist/client/notifications/NotificationsBell.js.map +1 -1
- package/dist/client/use-chat-threads.d.ts +13 -0
- package/dist/client/use-chat-threads.d.ts.map +1 -1
- package/dist/client/use-chat-threads.js +41 -0
- package/dist/client/use-chat-threads.js.map +1 -1
- package/dist/integrations/plugin.d.ts.map +1 -1
- package/dist/integrations/plugin.js +2 -2
- package/dist/integrations/plugin.js.map +1 -1
- package/dist/onboarding/default-steps.d.ts.map +1 -1
- package/dist/onboarding/default-steps.js +102 -0
- package/dist/onboarding/default-steps.js.map +1 -1
- package/dist/org/auto-join-domain.d.ts +11 -3
- package/dist/org/auto-join-domain.d.ts.map +1 -1
- package/dist/org/auto-join-domain.js +7 -6
- package/dist/org/auto-join-domain.js.map +1 -1
- package/dist/org/context.d.ts.map +1 -1
- package/dist/org/context.js +68 -32
- package/dist/org/context.js.map +1 -1
- package/dist/org/migrations.d.ts.map +1 -1
- package/dist/org/migrations.js +6 -0
- package/dist/org/migrations.js.map +1 -1
- package/dist/provider-api/actions/github-repo-files.d.ts +84 -0
- package/dist/provider-api/actions/github-repo-files.d.ts.map +1 -0
- package/dist/provider-api/actions/github-repo-files.js +213 -0
- package/dist/provider-api/actions/github-repo-files.js.map +1 -0
- package/dist/provider-api/github-repo.d.ts +11 -0
- package/dist/provider-api/github-repo.d.ts.map +1 -0
- package/dist/provider-api/github-repo.js +553 -0
- package/dist/provider-api/github-repo.js.map +1 -0
- package/dist/provider-api/index.d.ts +184 -11
- package/dist/provider-api/index.d.ts.map +1 -1
- package/dist/provider-api/index.js +519 -0
- package/dist/provider-api/index.js.map +1 -1
- package/dist/scripts/docs/search.d.ts.map +1 -1
- package/dist/scripts/docs/search.js +38 -13
- package/dist/scripts/docs/search.js.map +1 -1
- package/dist/secrets/register-framework-secrets.d.ts.map +1 -1
- package/dist/secrets/register-framework-secrets.js +11 -0
- package/dist/secrets/register-framework-secrets.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts +32 -0
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +297 -2
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/auth-marketing.d.ts.map +1 -1
- package/dist/server/auth-marketing.js +17 -7
- package/dist/server/auth-marketing.js.map +1 -1
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +6 -0
- package/dist/server/auth.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +18 -98
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/styles/blocks.css +30 -8
- package/dist/styles/rich-markdown-editor.css +10 -4
- package/dist/templates/{starter-shell-sync.spec.ts → chat-shell-sync.spec.ts} +21 -21
- package/dist/templates/default/.agents/skills/actions/SKILL.md +5 -5
- package/dist/templates/default/.agents/skills/agent-native-docs/SKILL.md +63 -0
- package/dist/templates/default/AGENTS.md +22 -1
- package/dist/templates/default/actions/hello.ts +1 -1
- package/dist/templates/default/actions/navigate.ts +1 -1
- package/dist/templates/default/actions/view-screen.ts +1 -1
- package/dist/templates/headless/.agents/skills/agent-native-docs/SKILL.md +63 -0
- package/dist/templates/headless/.env.example +4 -0
- package/dist/templates/headless/.prettierrc +5 -0
- package/dist/templates/headless/AGENTS.md +58 -0
- package/dist/templates/headless/DEVELOPING.md +22 -0
- package/dist/templates/headless/_gitignore +36 -0
- package/dist/templates/headless/actions/hello.ts +14 -0
- package/dist/templates/headless/actions/run.ts +3 -0
- package/dist/templates/headless/package.json +22 -0
- package/dist/templates/headless/tsconfig.json +7 -0
- package/dist/templates/ui-primitives-sync.spec.ts +2 -2
- package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -5
- package/dist/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +63 -0
- package/dist/templates/workspace-core/.agents/skills/client-side-routing/SKILL.md +9 -0
- package/dist/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +93 -0
- package/dist/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +11 -1
- package/dist/templates/workspace-core/.agents/skills/secrets/SKILL.md +1 -1
- package/dist/templates/workspace-core/AGENTS.md +20 -3
- package/dist/templates/workspace-core/src/server/index.ts +1 -1
- package/dist/templates/workspace-root/AGENTS.md +25 -5
- package/dist/templates/workspace-root/README.md +7 -7
- package/dist/triggers/dispatcher.d.ts +2 -3
- package/dist/triggers/dispatcher.d.ts.map +1 -1
- package/dist/triggers/dispatcher.js +2 -3
- package/dist/triggers/dispatcher.js.map +1 -1
- package/dist/triggers/routes.d.ts +38 -0
- package/dist/triggers/routes.d.ts.map +1 -0
- package/dist/triggers/routes.js +202 -0
- package/dist/triggers/routes.js.map +1 -0
- package/dist/vite/client.d.ts +2 -1
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +121 -2
- package/dist/vite/client.js.map +1 -1
- package/docs/AGENTS.md +57 -0
- package/docs/SKILL.md +40 -0
- package/docs/content/a2a-protocol.md +1 -1
- package/docs/content/actions.md +48 -8
- package/docs/content/agent-surfaces.md +76 -14
- package/docs/content/cli-adapters.md +1 -1
- package/docs/content/cloneable-saas.md +5 -4
- package/docs/content/code-agents-ui.md +1 -1
- package/docs/content/components.md +1 -1
- package/docs/content/context-awareness.md +15 -3
- package/docs/content/creating-templates.md +15 -7
- package/docs/content/drop-in-agent.md +1 -1
- package/docs/content/faq.md +6 -4
- package/docs/content/getting-started.md +63 -73
- package/docs/content/key-concepts.md +24 -24
- package/docs/content/native-chat-ui.md +4 -4
- package/docs/content/pure-agent-apps.md +34 -10
- package/docs/content/security.md +1 -1
- package/docs/content/server.md +1 -1
- package/docs/content/template-chat.md +85 -0
- package/docs/content/template-dispatch.md +1 -1
- package/docs/content/tracking.md +1 -1
- package/docs/content/what-is-agent-native.md +7 -6
- package/package.json +10 -1
- package/src/templates/{starter-shell-sync.spec.ts → chat-shell-sync.spec.ts} +21 -21
- package/src/templates/default/.agents/skills/actions/SKILL.md +5 -5
- package/src/templates/default/.agents/skills/agent-native-docs/SKILL.md +63 -0
- package/src/templates/default/AGENTS.md +22 -1
- package/src/templates/default/actions/hello.ts +1 -1
- package/src/templates/default/actions/navigate.ts +1 -1
- package/src/templates/default/actions/view-screen.ts +1 -1
- package/src/templates/headless/.agents/skills/agent-native-docs/SKILL.md +63 -0
- package/src/templates/headless/.env.example +4 -0
- package/src/templates/headless/.prettierrc +5 -0
- package/src/templates/headless/AGENTS.md +58 -0
- package/src/templates/headless/DEVELOPING.md +22 -0
- package/src/templates/headless/_gitignore +36 -0
- package/src/templates/headless/actions/hello.ts +14 -0
- package/src/templates/headless/actions/run.ts +3 -0
- package/src/templates/headless/package.json +22 -0
- package/src/templates/headless/tsconfig.json +7 -0
- package/src/templates/ui-primitives-sync.spec.ts +2 -2
- package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -5
- package/src/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +63 -0
- package/src/templates/workspace-core/.agents/skills/client-side-routing/SKILL.md +9 -0
- package/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +93 -0
- package/src/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +11 -1
- package/src/templates/workspace-core/.agents/skills/secrets/SKILL.md +1 -1
- package/src/templates/workspace-core/AGENTS.md +20 -3
- package/src/templates/workspace-core/src/server/index.ts +1 -1
- package/src/templates/workspace-root/AGENTS.md +25 -5
- package/src/templates/workspace-root/README.md +7 -7
- package/docs/content/template-starter.md +0 -78
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/provider-api/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport {\n resolveCredential,\n type CredentialContext,\n} from \"../credentials/index.js\";\nimport {\n createSsrfSafeDispatcher,\n isBlockedExtensionUrlWithDns,\n} from \"../extensions/url-safety.js\";\nimport {\n processWebContent,\n type WebContentSearchOptions,\n type WebExtractMode,\n type WebResponseMode,\n} from \"../extensions/web-content.js\";\nimport {\n deleteOAuthTokens,\n listOAuthAccountsByOwner,\n saveOAuthTokens,\n} from \"../oauth-tokens/index.js\";\nimport { getCredentialContext } from \"../server/request-context.js\";\nimport { resolveWorkspaceConnectionCredentialForApp } from \"../workspace-connections/credentials.js\";\nimport type { WorkspaceConnectionTemplateUse } from \"../connections/catalog.js\";\nimport type {\n CustomProviderConfig,\n CustomProviderAuthKind,\n} from \"./custom-registry.js\";\nimport {\n createProviderQuotaIdentity,\n createProviderRequestDedupeKey,\n executeWithProviderQuota,\n type ProviderQuotaIdentity,\n type ProviderQuotaExhaustedDetail,\n} from \"./quota-governor.js\";\n\nexport type {\n CustomProviderConfig,\n CustomProviderScope,\n CustomProviderAuthKind,\n UpsertCustomProviderArgs,\n} from \"./custom-registry.js\";\nexport {\n upsertCustomProvider,\n deleteCustomProvider,\n listCustomProviders,\n getCustomProvider,\n validateCustomBaseUrl,\n} from \"./custom-registry.js\";\n\nexport const PROVIDER_API_IDS = [\n \"amplitude\",\n \"apollo\",\n \"bigquery\",\n \"commonroom\",\n \"dataforseo\",\n \"ga4\",\n \"gcloud\",\n \"github\",\n \"gmail\",\n \"gong\",\n \"google_calendar\",\n \"google_drive\",\n \"granola\",\n \"grafana\",\n \"hubspot\",\n \"jira\",\n \"mixpanel\",\n \"notion\",\n \"posthog\",\n \"prometheus\",\n \"pylon\",\n \"sentry\",\n \"slack\",\n \"stripe\",\n \"twitter\",\n] as const;\n\nexport type ProviderApiId = (typeof PROVIDER_API_IDS)[number];\n\nexport type ProviderApiMethod =\n | \"GET\"\n | \"POST\"\n | \"PUT\"\n | \"PATCH\"\n | \"DELETE\"\n | \"HEAD\";\n\n/** Cursor-pagination config for fetchAllPages. */\nexport interface FetchAllPagesConfig {\n /**\n * Dot-path into the JSON response body where the next-page cursor lives,\n * e.g. \"meta.next_cursor\" or \"pagination.next_page_token\".\n */\n cursorPath: string;\n /**\n * Query parameter name to pass the cursor on the next request,\n * e.g. \"cursor\" or \"page_token\".\n */\n cursorParam?: string;\n /**\n * Dot-path in the JSON request body to set to the cursor on the next request.\n * Use this for POST-body pagination, e.g. Gong's top-level `cursor`.\n */\n cursorBodyPath?: string;\n /**\n * Dot-path to the items array in each response body.\n * When omitted, the whole response body is appended to the items array.\n */\n itemsPath?: string;\n /**\n * Maximum number of pages to fetch. Default 10, max 50.\n */\n maxPages?: number;\n}\n\nexport interface ProviderApiRequestArgs {\n provider: ProviderApiId | string;\n method?: ProviderApiMethod;\n path: string;\n query?: unknown;\n headers?: Record<string, unknown>;\n body?: unknown;\n auth?: \"default\" | \"none\";\n timeoutMs?: number;\n maxBytes?: number;\n connectionId?: string | null;\n accountId?: string | null;\n /**\n * When set, write the full response body to this workspace file path instead\n * of returning it in context. Returns a compact summary with status, bytes,\n * path, and a preview. Allows up to 20 MB (vs the normal 4 MB context limit).\n */\n saveToFile?: string;\n /**\n * When set, automatically paginate by cursor until the cursor field is empty\n * or maxPages is reached. Accumulates items from itemsPath (or whole bodies)\n * across all pages. Combine with saveToFile to write the full dataset.\n */\n fetchAllPages?: FetchAllPagesConfig;\n}\n\nexport interface ProviderApiDocsOptions {\n provider: ProviderApiId | string;\n url?: string;\n maxBytes?: number;\n maxChars?: number;\n responseMode?: WebResponseMode;\n extract?: WebExtractMode;\n includeLinks?: boolean;\n search?: WebContentSearchOptions;\n}\n\nexport type ProviderApiAuthKind =\n | { type: \"none\" }\n | {\n type: \"bearer\";\n keys: readonly string[];\n workspaceProvider?: string;\n }\n | {\n type: \"basic\";\n usernameKey: string;\n passwordKey: string;\n workspaceProvider?: string;\n }\n | {\n type: \"basic-raw\";\n key: string;\n workspaceProvider?: string;\n }\n | {\n type: \"api-key-header\";\n key: string;\n header: string;\n workspaceProvider?: string;\n }\n | {\n type: \"google-service-account\";\n scopes: readonly string[];\n }\n | {\n type: \"oauth-bearer\";\n oauthProvider: string;\n tokenLabel: string;\n }\n | {\n type: \"prometheus\";\n };\n\nexport interface ProviderApiConfig {\n id: ProviderApiId;\n label: string;\n defaultBaseUrl: string;\n baseUrlCredentialKey?: string;\n auth: ProviderApiAuthKind;\n credentialKeys: readonly string[];\n docsUrls: readonly string[];\n specUrls?: readonly string[];\n allowedHostSuffixes?: readonly string[];\n defaultHeaders?: Record<string, string>;\n placeholders?: readonly ProviderApiPlaceholder[];\n examples?: readonly ProviderApiExample[];\n notes?: readonly string[];\n corpusRecipes?: readonly ProviderApiCorpusRecipe[];\n templateUses?: readonly WorkspaceConnectionTemplateUse[];\n}\n\nexport interface ProviderApiPlaceholder {\n name: string;\n credentialKey: string;\n label: string;\n}\n\nexport interface ProviderApiExample {\n label: string;\n method: ProviderApiMethod;\n path: string;\n body?: unknown;\n}\n\nexport interface ProviderApiCorpusRecipe {\n label: string;\n useWhen: string;\n workflow: readonly string[];\n request: {\n method: ProviderApiMethod;\n path: string;\n body?: unknown;\n query?: unknown;\n };\n pagination?: {\n itemsPath?: string;\n nextCursorPath?: string;\n cursorParam?: string;\n cursorBodyPath?: string;\n pageParam?: string;\n offsetParam?: string;\n pageSize?: number;\n maxPages?: number;\n };\n batch?: {\n inputValuePath?: string;\n itemBodyPath?: string;\n itemQueryParam?: string;\n responseItemsPath?: string;\n batchSize?: number;\n };\n search?: {\n textPaths?: readonly string[];\n idPaths?: readonly string[];\n metadataPaths?: readonly string[];\n };\n}\n\nexport interface ProviderApiResolvedCredential {\n key: string;\n value: string;\n source: string;\n provider: string;\n connectionId?: string;\n connectionLabel?: string;\n accountId?: string;\n accountLabel?: string | null;\n scope?: string;\n}\n\nexport interface ProviderApiCredentialLookupOptions {\n appId: string;\n provider: string;\n key: string;\n ctx: CredentialContext;\n workspaceProvider?: string;\n connectionId?: string | null;\n localCredentialSource: string;\n}\n\nexport type ProviderApiCredentialResolver = (\n options: ProviderApiCredentialLookupOptions,\n) => Promise<ProviderApiResolvedCredential | null>;\n\nexport interface ProviderApiRuntimeOptions {\n appId: string;\n providerIds?: readonly (ProviderApiId | string)[];\n localCredentialSource?: string;\n getCredentialContext?: () => CredentialContext | null;\n resolveCredential?: ProviderApiCredentialResolver;\n /**\n * Template-specific OAuth token provider overrides for built-in provider API\n * configs. Use when an app stores a provider's OAuth grant under a narrower\n * local provider id, e.g. Google Drive scoped to a \"google-docs\" connection.\n */\n oauthProviderOverrides?: Record<string, string>;\n /**\n * Optional loader for custom providers registered at runtime. When provided,\n * custom providers are merged with the static built-in registry for catalog,\n * docs, and request operations. Custom providers cannot shadow built-in ids.\n */\n getCustomProviders?: () => Promise<CustomProviderConfig[]>;\n}\n\ninterface ProviderApiRuntime {\n providerIds: readonly ProviderApiId[];\n listCatalog(\n provider?: ProviderApiId | string,\n ): ReturnType<typeof listProviderApiCatalog> | Promise<unknown[]>;\n fetchDocs(options: ProviderApiDocsOptions): Promise<unknown>;\n executeRequest(args: ProviderApiRequestArgs): Promise<unknown>;\n}\n\ninterface ResolvedAuth {\n headers: Record<string, string>;\n credentialSources: Array<Omit<ProviderApiResolvedCredential, \"value\">>;\n secretValues: string[];\n}\n\ninterface ProviderApiHttpResponse {\n status: number;\n statusText: string;\n ok: boolean;\n elapsedMs: number;\n headers: Record<string, string>;\n contentType: string | null;\n size: number;\n truncated: boolean;\n text?: string;\n json?: unknown;\n quota?: {\n exhausted: boolean;\n providerId: string;\n retryAfterMs: number;\n retryAt: string;\n reason: string;\n };\n}\n\ninterface ProviderApiFetchQuotaOptions {\n identity: ProviderQuotaIdentity;\n method: ProviderApiMethod;\n target: string;\n requestKey?: string;\n}\n\ninterface OAuthTokens {\n access_token?: string;\n accessToken?: string;\n refresh_token?: string;\n refreshToken?: string;\n expiry_date?: number;\n expiresAt?: number;\n expires_in?: number;\n token_type?: string;\n scope?: string;\n}\n\nconst PERMANENT_GOOGLE_OAUTH_REFRESH_ERRORS = new Set([\n \"invalid_grant\",\n \"unauthorized_client\",\n \"invalid_client\",\n]);\n\nconst DEFAULT_TIMEOUT_MS = 30_000;\nconst MAX_TIMEOUT_MS = 120_000;\nconst DEFAULT_MAX_BYTES = 1024 * 1024;\nconst MAX_MAX_BYTES = 4 * 1024 * 1024;\n/** When saveToFile is used, allow a much larger per-page response since the\n * content won't enter the model's context window. */\nconst SAVE_TO_FILE_MAX_BYTES = 20 * 1024 * 1024; // 20 MB\nconst FETCH_ALL_PAGES_MAX = 50;\nconst HEADER_NAME_RE = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;\nconst BLOCKED_OUTBOUND_HEADERS = new Set([\n \"connection\",\n \"content-length\",\n \"cookie\",\n \"forwarded\",\n \"host\",\n \"keep-alive\",\n \"origin\",\n \"proxy-authenticate\",\n \"proxy-authorization\",\n \"referer\",\n \"set-cookie\",\n \"te\",\n \"trailer\",\n \"transfer-encoding\",\n \"upgrade\",\n \"x-forwarded-for\",\n \"x-forwarded-host\",\n \"x-forwarded-proto\",\n]);\n\nconst PROVIDER_CONFIGS: Record<ProviderApiId, ProviderApiConfig> = {\n amplitude: {\n id: \"amplitude\",\n label: \"Amplitude\",\n defaultBaseUrl: \"https://amplitude.com/api/2\",\n auth: {\n type: \"basic\",\n usernameKey: \"AMPLITUDE_API_KEY\",\n passwordKey: \"AMPLITUDE_SECRET_KEY\",\n },\n credentialKeys: [\"AMPLITUDE_API_KEY\", \"AMPLITUDE_SECRET_KEY\"],\n docsUrls: [\"https://amplitude.com/docs/apis\"],\n allowedHostSuffixes: [\"amplitude.com\"],\n templateUses: [\"analytics\"],\n examples: [\n {\n label: \"Export events\",\n method: \"GET\",\n path: \"/export?start=20260601T00&end=20260602T00\",\n },\n ],\n },\n apollo: {\n id: \"apollo\",\n label: \"Apollo\",\n defaultBaseUrl: \"https://api.apollo.io\",\n auth: {\n type: \"api-key-header\",\n key: \"APOLLO_API_KEY\",\n header: \"x-api-key\",\n },\n credentialKeys: [\"APOLLO_API_KEY\"],\n docsUrls: [\"https://docs.apollo.io/reference/api-reference\"],\n templateUses: [\"analytics\", \"calendar\"],\n examples: [\n {\n label: \"Search people\",\n method: \"POST\",\n path: \"/api/v1/mixed_people/search\",\n body: { q_keywords: \"vp marketing\", page: 1, per_page: 10 },\n },\n ],\n },\n bigquery: {\n id: \"bigquery\",\n label: \"BigQuery REST API\",\n defaultBaseUrl: \"https://bigquery.googleapis.com/bigquery/v2\",\n auth: {\n type: \"google-service-account\",\n scopes: [\n \"https://www.googleapis.com/auth/cloud-platform\",\n \"https://www.googleapis.com/auth/bigquery\",\n ],\n },\n credentialKeys: [\n \"GOOGLE_APPLICATION_CREDENTIALS_JSON\",\n \"BIGQUERY_PROJECT_ID\",\n ],\n docsUrls: [\"https://cloud.google.com/bigquery/docs/reference/rest\"],\n specUrls: [\"https://bigquery.googleapis.com/$discovery/rest?version=v2\"],\n allowedHostSuffixes: [\"googleapis.com\"],\n templateUses: [\"analytics\"],\n placeholders: [\n {\n name: \"projectId\",\n credentialKey: \"BIGQUERY_PROJECT_ID\",\n label: \"Configured BigQuery project ID\",\n },\n ],\n examples: [\n {\n label: \"List datasets\",\n method: \"GET\",\n path: \"/projects/{projectId}/datasets\",\n },\n {\n label: \"Run query\",\n method: \"POST\",\n path: \"/projects/{projectId}/queries\",\n body: { query: \"SELECT 1\", useLegacySql: false },\n },\n ],\n },\n commonroom: {\n id: \"commonroom\",\n label: \"Common Room\",\n defaultBaseUrl: \"https://api.commonroom.io/community/v1\",\n auth: {\n type: \"bearer\",\n keys: [\"COMMONROOM_API_TOKEN\"],\n },\n credentialKeys: [\"COMMONROOM_API_TOKEN\"],\n docsUrls: [\"https://developer.commonroom.io/reference/overview\"],\n templateUses: [\"analytics\"],\n examples: [{ label: \"List members\", method: \"GET\", path: \"/members\" }],\n },\n dataforseo: {\n id: \"dataforseo\",\n label: \"DataForSEO\",\n defaultBaseUrl: \"https://api.dataforseo.com/v3\",\n auth: {\n type: \"basic\",\n usernameKey: \"DATAFORSEO_LOGIN\",\n passwordKey: \"DATAFORSEO_PASSWORD\",\n },\n credentialKeys: [\"DATAFORSEO_LOGIN\", \"DATAFORSEO_PASSWORD\"],\n docsUrls: [\"https://docs.dataforseo.com/v3/\"],\n templateUses: [\"analytics\"],\n examples: [\n {\n label: \"SERP task post\",\n method: \"POST\",\n path: \"/serp/google/organic/task_post\",\n body: [\n { keyword: \"builder.io\", location_code: 2840, language_code: \"en\" },\n ],\n },\n ],\n },\n ga4: {\n id: \"ga4\",\n label: \"Google Analytics Data API\",\n defaultBaseUrl: \"https://analyticsdata.googleapis.com/v1beta\",\n auth: {\n type: \"google-service-account\",\n scopes: [\"https://www.googleapis.com/auth/analytics.readonly\"],\n },\n credentialKeys: [\"GOOGLE_APPLICATION_CREDENTIALS_JSON\", \"GA4_PROPERTY_ID\"],\n docsUrls: [\n \"https://developers.google.com/analytics/devguides/reporting/data/v1/rest\",\n ],\n specUrls: [\n \"https://analyticsdata.googleapis.com/$discovery/rest?version=v1beta\",\n ],\n allowedHostSuffixes: [\"googleapis.com\"],\n templateUses: [\"analytics\"],\n placeholders: [\n {\n name: \"propertyId\",\n credentialKey: \"GA4_PROPERTY_ID\",\n label: \"Configured GA4 property ID\",\n },\n ],\n examples: [\n {\n label: \"Run report\",\n method: \"POST\",\n path: \"/properties/{propertyId}:runReport\",\n body: {\n dateRanges: [{ startDate: \"30daysAgo\", endDate: \"today\" }],\n metrics: [{ name: \"activeUsers\" }],\n },\n },\n ],\n },\n gcloud: {\n id: \"gcloud\",\n label: \"Google Cloud APIs\",\n defaultBaseUrl: \"https://cloudresourcemanager.googleapis.com\",\n auth: {\n type: \"google-service-account\",\n scopes: [\n \"https://www.googleapis.com/auth/cloud-platform\",\n \"https://www.googleapis.com/auth/monitoring.read\",\n \"https://www.googleapis.com/auth/logging.read\",\n \"https://www.googleapis.com/auth/bigquery\",\n ],\n },\n credentialKeys: [\n \"GOOGLE_APPLICATION_CREDENTIALS_JSON\",\n \"BIGQUERY_PROJECT_ID\",\n ],\n docsUrls: [\"https://cloud.google.com/apis/docs/overview\"],\n specUrls: [\"https://www.googleapis.com/discovery/v1/apis\"],\n allowedHostSuffixes: [\"googleapis.com\"],\n templateUses: [\"analytics\"],\n placeholders: [\n {\n name: \"projectId\",\n credentialKey: \"BIGQUERY_PROJECT_ID\",\n label: \"Configured Google Cloud project ID\",\n },\n ],\n examples: [\n {\n label: \"Get project\",\n method: \"GET\",\n path: \"https://cloudresourcemanager.googleapis.com/v1/projects/{projectId}\",\n },\n ],\n },\n github: {\n id: \"github\",\n label: \"GitHub REST API\",\n defaultBaseUrl: \"https://api.github.com\",\n auth: {\n type: \"bearer\",\n keys: [\"GITHUB_TOKEN\"],\n workspaceProvider: \"github\",\n },\n credentialKeys: [\"GITHUB_TOKEN\"],\n docsUrls: [\"https://docs.github.com/rest\"],\n specUrls: [\n \"https://raw.githubusercontent.com/github/rest-api-description/main/descriptions/api.github.com/api.github.com.json\",\n ],\n defaultHeaders: {\n Accept: \"application/vnd.github+json\",\n \"X-GitHub-Api-Version\": \"2022-11-28\",\n },\n templateUses: [\"analytics\", \"brain\", \"design\", \"dispatch\"],\n examples: [\n { label: \"Authenticated user\", method: \"GET\", path: \"/user\" },\n { label: \"Search issues\", method: \"GET\", path: \"/search/issues\" },\n ],\n },\n gmail: {\n id: \"gmail\",\n label: \"Gmail API\",\n defaultBaseUrl: \"https://gmail.googleapis.com/gmail/v1\",\n auth: {\n type: \"oauth-bearer\",\n oauthProvider: \"google\",\n tokenLabel: \"Google OAuth token\",\n },\n credentialKeys: [\"GOOGLE_OAUTH_ACCOUNT\"],\n docsUrls: [\"https://developers.google.com/gmail/api/reference/rest\"],\n specUrls: [\"https://gmail.googleapis.com/$discovery/rest?version=v1\"],\n allowedHostSuffixes: [\"googleapis.com\"],\n templateUses: [\"brain\", \"mail\", \"dispatch\"],\n examples: [\n {\n label: \"List messages\",\n method: \"GET\",\n path: \"/users/me/messages\",\n },\n {\n label: \"Search messages\",\n method: \"GET\",\n path: \"/users/me/messages\",\n body: undefined,\n },\n ],\n notes: [\n \"Uses the current user's stored Google OAuth account. Pass accountId when the user has multiple Google accounts connected.\",\n ],\n },\n gong: {\n id: \"gong\",\n label: \"Gong\",\n defaultBaseUrl: \"https://api.gong.io/v2\",\n baseUrlCredentialKey: \"GONG_API_BASE\",\n auth: {\n type: \"basic\",\n usernameKey: \"GONG_ACCESS_KEY\",\n passwordKey: \"GONG_ACCESS_SECRET\",\n },\n credentialKeys: [\"GONG_ACCESS_KEY\", \"GONG_ACCESS_SECRET\", \"GONG_API_BASE\"],\n docsUrls: [\"https://gong.app.gong.io/settings/api/documentation\"],\n templateUses: [\"analytics\", \"calendar\"],\n examples: [\n { label: \"List calls\", method: \"GET\", path: \"/calls\" },\n {\n label: \"Call transcript\",\n method: \"POST\",\n path: \"/calls/transcript\",\n body: { filter: { callIds: [\"<call-id>\"] } },\n },\n {\n label: \"Calls with parties/content\",\n method: \"POST\",\n path: \"/calls/extensive\",\n body: {\n filter: { fromDateTime: \"<iso-date-time>\" },\n contentSelector: {\n exposedFields: {\n parties: true,\n content: { brief: true, keyPoints: true },\n },\n },\n },\n },\n ],\n notes: [\n \"For broad corpus work, call /calls/extensive with provider-api-request and stageAs/saveToFile. Gong returns the next cursor at records.cursor and expects the next cursor in the POST body at cursor, so use pagination { nextCursorPath: 'records.cursor', cursorBodyPath: 'cursor' } for stageAs or fetchAllPages { cursorPath: 'records.cursor', cursorBodyPath: 'cursor' } for saveToFile.\",\n \"Batch transcripts with POST /calls/transcript and body { filter: { callIds: [...] } } after narrowing or staging call ids.\",\n ],\n corpusRecipes: [\n {\n label: \"Batch-search Gong call transcripts from staged call ids\",\n useWhen:\n \"Use when the user asks to search, count, or prove absence across Gong transcript text for a bounded cohort of call ids.\",\n workflow: [\n \"Stage or otherwise collect the exact call ids in scope first.\",\n \"Start provider-corpus-job with mode=batch-search against /calls/transcript.\",\n \"Inject each batch into body path filter.callIds and search responseItemsPath callTranscripts.\",\n \"Search transcript.sentence text fields, then report call-id coverage, batches processed, matches, and gaps.\",\n ],\n request: {\n method: \"POST\",\n path: \"/calls/transcript\",\n body: { filter: { callIds: [] } },\n },\n batch: {\n inputValuePath: \"id\",\n itemBodyPath: \"filter.callIds\",\n responseItemsPath: \"callTranscripts\",\n batchSize: 20,\n },\n search: {\n textPaths: [\"transcript.sentences.text\", \"transcript\"],\n idPaths: [\"callId\"],\n metadataPaths: [\"callId\"],\n },\n },\n {\n label: \"Stage Gong calls with parties/content\",\n useWhen:\n \"Use when the user needs a complete Gong call cohort before a transcript/message join or coverage-sensitive search.\",\n workflow: [\n \"Call provider-api-request with stageAs and pagination.\",\n \"Use /calls/extensive when party fields or content summaries are needed; use /calls for lightweight metadata.\",\n \"Do not treat staged call metadata as transcript text.\",\n ],\n request: {\n method: \"POST\",\n path: \"/calls/extensive\",\n body: {\n filter: { fromDateTime: \"<iso-date-time>\" },\n contentSelector: { exposedFields: { parties: true } },\n },\n },\n pagination: {\n itemsPath: \"calls\",\n nextCursorPath: \"records.cursor\",\n cursorBodyPath: \"cursor\",\n maxPages: 200,\n },\n },\n ],\n },\n google_calendar: {\n id: \"google_calendar\",\n label: \"Google Calendar API\",\n defaultBaseUrl: \"https://www.googleapis.com/calendar/v3\",\n auth: {\n type: \"oauth-bearer\",\n oauthProvider: \"google\",\n tokenLabel: \"Google OAuth token\",\n },\n credentialKeys: [\"GOOGLE_OAUTH_ACCOUNT\"],\n docsUrls: [\"https://developers.google.com/calendar/api/v3/reference\"],\n specUrls: [\"https://www.googleapis.com/discovery/v1/apis/calendar/v3/rest\"],\n allowedHostSuffixes: [\"googleapis.com\"],\n templateUses: [\"brain\", \"calendar\", \"dispatch\", \"mail\"],\n examples: [\n {\n label: \"List calendars\",\n method: \"GET\",\n path: \"/users/me/calendarList\",\n },\n {\n label: \"Search events\",\n method: \"GET\",\n path: \"/calendars/primary/events\",\n },\n ],\n notes: [\n \"Uses the current user's stored Google OAuth account. Pass accountId when the user has multiple Google accounts connected.\",\n ],\n },\n google_drive: {\n id: \"google_drive\",\n label: \"Google Drive API\",\n defaultBaseUrl: \"https://www.googleapis.com/drive/v3\",\n auth: {\n type: \"oauth-bearer\",\n oauthProvider: \"google\",\n tokenLabel: \"Google OAuth token\",\n },\n credentialKeys: [\"GOOGLE_OAUTH_ACCOUNT\"],\n docsUrls: [\"https://developers.google.com/drive/api/reference/rest/v3\"],\n specUrls: [\"https://www.googleapis.com/discovery/v1/apis/drive/v3/rest\"],\n allowedHostSuffixes: [\"googleapis.com\"],\n templateUses: [\"brain\", \"content\", \"slides\", \"dispatch\"],\n examples: [\n { label: \"List files\", method: \"GET\", path: \"/files\" },\n { label: \"Get file metadata\", method: \"GET\", path: \"/files/{fileId}\" },\n ],\n notes: [\n \"Uses the current user's stored Google OAuth account. Pass accountId when the user has multiple Google accounts connected.\",\n ],\n },\n granola: {\n id: \"granola\",\n label: \"Granola Public API\",\n defaultBaseUrl: \"https://public-api.granola.ai/v1\",\n auth: {\n type: \"bearer\",\n keys: [\"GRANOLA_API_KEY\"],\n workspaceProvider: \"granola\",\n },\n credentialKeys: [\"GRANOLA_API_KEY\"],\n docsUrls: [\"https://docs.granola.ai/\"],\n templateUses: [\"brain\", \"dispatch\"],\n examples: [\n { label: \"List notes\", method: \"GET\", path: \"/notes\" },\n { label: \"Get note\", method: \"GET\", path: \"/notes/<note-id>\" },\n ],\n },\n grafana: {\n id: \"grafana\",\n label: \"Grafana\",\n defaultBaseUrl: \"https://grafana.example.com\",\n baseUrlCredentialKey: \"GRAFANA_URL\",\n auth: {\n type: \"bearer\",\n keys: [\"GRAFANA_API_TOKEN\"],\n },\n credentialKeys: [\"GRAFANA_URL\", \"GRAFANA_API_TOKEN\"],\n docsUrls: [\"https://grafana.com/docs/grafana/latest/developers/http_api/\"],\n templateUses: [\"analytics\"],\n examples: [\n { label: \"List dashboards\", method: \"GET\", path: \"/api/search\" },\n ],\n },\n hubspot: {\n id: \"hubspot\",\n label: \"HubSpot\",\n defaultBaseUrl: \"https://api.hubapi.com\",\n auth: {\n type: \"bearer\",\n keys: [\"HUBSPOT_PRIVATE_APP_TOKEN\", \"HUBSPOT_ACCESS_TOKEN\"],\n workspaceProvider: \"hubspot\",\n },\n credentialKeys: [\"HUBSPOT_PRIVATE_APP_TOKEN\", \"HUBSPOT_ACCESS_TOKEN\"],\n docsUrls: [\"https://developers.hubspot.com/docs/api/overview\"],\n templateUses: [\"analytics\", \"brain\", \"calendar\", \"mail\", \"dispatch\"],\n examples: [\n {\n label: \"Search deals with any HubSpot CRM filter\",\n method: \"POST\",\n path: \"/crm/v3/objects/deals/search\",\n body: {\n filterGroups: [\n {\n filters: [\n {\n propertyName: \"products\",\n operator: \"CONTAINS_TOKEN\",\n value: \"Publish\",\n },\n ],\n },\n ],\n properties: [\"dealname\", \"products\", \"dealstage\", \"closedate\"],\n limit: 100,\n },\n },\n {\n label: \"List deal property metadata\",\n method: \"GET\",\n path: \"/crm/v3/properties/deals\",\n },\n ],\n },\n jira: {\n id: \"jira\",\n label: \"Jira Cloud\",\n defaultBaseUrl: \"https://example.atlassian.net\",\n baseUrlCredentialKey: \"JIRA_BASE_URL\",\n auth: {\n type: \"basic\",\n usernameKey: \"JIRA_USER_EMAIL\",\n passwordKey: \"JIRA_API_TOKEN\",\n },\n credentialKeys: [\"JIRA_BASE_URL\", \"JIRA_USER_EMAIL\", \"JIRA_API_TOKEN\"],\n docsUrls: [\n \"https://developer.atlassian.com/cloud/jira/platform/rest/v3/intro/\",\n ],\n specUrls: [\n \"https://dac-static.atlassian.com/cloud/jira/platform/swagger-v3.v3.json\",\n ],\n templateUses: [\"analytics\"],\n examples: [\n {\n label: \"JQL search\",\n method: \"GET\",\n path: \"/rest/api/3/search/jql\",\n },\n ],\n },\n mixpanel: {\n id: \"mixpanel\",\n label: \"Mixpanel\",\n defaultBaseUrl: \"https://mixpanel.com/api/query\",\n auth: {\n type: \"basic-raw\",\n key: \"MIXPANEL_SERVICE_ACCOUNT\",\n },\n credentialKeys: [\"MIXPANEL_PROJECT_ID\", \"MIXPANEL_SERVICE_ACCOUNT\"],\n docsUrls: [\"https://developer.mixpanel.com/reference/overview\"],\n allowedHostSuffixes: [\"mixpanel.com\"],\n templateUses: [\"analytics\"],\n placeholders: [\n {\n name: \"projectId\",\n credentialKey: \"MIXPANEL_PROJECT_ID\",\n label: \"Configured Mixpanel project ID\",\n },\n ],\n examples: [\n {\n label: \"Query events\",\n method: \"GET\",\n path: \"/events\",\n },\n ],\n notes: [\n \"Mixpanel uses multiple API hosts. You may pass full URLs for mixpanel.com or data.mixpanel.com endpoints.\",\n ],\n },\n notion: {\n id: \"notion\",\n label: \"Notion\",\n defaultBaseUrl: \"https://api.notion.com/v1\",\n auth: {\n type: \"bearer\",\n keys: [\"NOTION_API_KEY\"],\n workspaceProvider: \"notion\",\n },\n credentialKeys: [\"NOTION_API_KEY\"],\n docsUrls: [\"https://developers.notion.com/reference/intro\"],\n defaultHeaders: { \"Notion-Version\": \"2022-06-28\" },\n templateUses: [\"analytics\", \"brain\", \"content\", \"dispatch\"],\n examples: [{ label: \"Search\", method: \"POST\", path: \"/search\", body: {} }],\n },\n posthog: {\n id: \"posthog\",\n label: \"PostHog\",\n defaultBaseUrl: \"https://app.posthog.com\",\n baseUrlCredentialKey: \"POSTHOG_HOST\",\n auth: {\n type: \"bearer\",\n keys: [\"POSTHOG_API_KEY\"],\n },\n credentialKeys: [\"POSTHOG_API_KEY\", \"POSTHOG_PROJECT_ID\", \"POSTHOG_HOST\"],\n docsUrls: [\"https://posthog.com/docs/api\"],\n templateUses: [\"analytics\"],\n placeholders: [\n {\n name: \"projectId\",\n credentialKey: \"POSTHOG_PROJECT_ID\",\n label: \"Configured PostHog project ID\",\n },\n ],\n examples: [\n {\n label: \"List events\",\n method: \"GET\",\n path: \"/api/projects/{projectId}/events/\",\n },\n ],\n },\n prometheus: {\n id: \"prometheus\",\n label: \"Prometheus\",\n defaultBaseUrl: \"https://prometheus.example.com\",\n baseUrlCredentialKey: \"PROMETHEUS_URL\",\n auth: { type: \"prometheus\" },\n credentialKeys: [\n \"PROMETHEUS_URL\",\n \"PROMETHEUS_USERNAME\",\n \"PROMETHEUS_PASSWORD\",\n \"PROMETHEUS_BEARER_TOKEN\",\n ],\n docsUrls: [\"https://prometheus.io/docs/prometheus/latest/querying/api/\"],\n templateUses: [\"analytics\"],\n examples: [\n {\n label: \"Instant query\",\n method: \"GET\",\n path: \"/api/v1/query\",\n },\n ],\n },\n pylon: {\n id: \"pylon\",\n label: \"Pylon\",\n defaultBaseUrl: \"https://api.usepylon.com\",\n auth: {\n type: \"bearer\",\n keys: [\"PYLON_API_KEY\"],\n },\n credentialKeys: [\"PYLON_API_KEY\"],\n docsUrls: [\"https://docs.usepylon.com/pylon-docs/developer/api-reference\"],\n templateUses: [\"analytics\", \"calendar\"],\n examples: [{ label: \"List issues\", method: \"GET\", path: \"/issues\" }],\n },\n sentry: {\n id: \"sentry\",\n label: \"Sentry\",\n defaultBaseUrl: \"https://sentry.io/api/0\",\n auth: {\n type: \"bearer\",\n keys: [\"SENTRY_AUTH_TOKEN\", \"SENTRY_SERVER_TOKEN\"],\n },\n credentialKeys: [\n \"SENTRY_AUTH_TOKEN\",\n \"SENTRY_SERVER_TOKEN\",\n \"SENTRY_ORG_SLUG\",\n ],\n docsUrls: [\"https://docs.sentry.io/api/\"],\n templateUses: [\"analytics\"],\n placeholders: [\n {\n name: \"orgSlug\",\n credentialKey: \"SENTRY_ORG_SLUG\",\n label: \"Configured Sentry organization slug\",\n },\n ],\n examples: [\n {\n label: \"List issues for org\",\n method: \"GET\",\n path: \"/organizations/{orgSlug}/issues/\",\n },\n ],\n },\n slack: {\n id: \"slack\",\n label: \"Slack Web API\",\n defaultBaseUrl: \"https://slack.com/api\",\n auth: {\n type: \"bearer\",\n keys: [\"SLACK_BOT_TOKEN\"],\n workspaceProvider: \"slack\",\n },\n credentialKeys: [\"SLACK_BOT_TOKEN\", \"SLACK_BOT_TOKEN_2\"],\n docsUrls: [\"https://api.slack.com/web\"],\n specUrls: [\n \"https://api.slack.com/specs/openapi/v2/slack_web_openapi_v2_without_examples.json\",\n ],\n templateUses: [\"analytics\", \"brain\", \"dispatch\"],\n examples: [\n { label: \"Search messages\", method: \"GET\", path: \"/search.messages\" },\n { label: \"Post message\", method: \"POST\", path: \"/chat.postMessage\" },\n ],\n },\n stripe: {\n id: \"stripe\",\n label: \"Stripe\",\n defaultBaseUrl: \"https://api.stripe.com/v1\",\n auth: {\n type: \"bearer\",\n keys: [\"STRIPE_SECRET_KEY\"],\n },\n credentialKeys: [\"STRIPE_SECRET_KEY\"],\n docsUrls: [\"https://docs.stripe.com/api\"],\n specUrls: [\n \"https://raw.githubusercontent.com/stripe/openapi/master/openapi/spec3.json\",\n ],\n templateUses: [\"analytics\"],\n examples: [{ label: \"List customers\", method: \"GET\", path: \"/customers\" }],\n },\n twitter: {\n id: \"twitter\",\n label: \"Twitter/X via twitterapi.io\",\n defaultBaseUrl: \"https://api.twitterapi.io\",\n auth: {\n type: \"api-key-header\",\n key: \"TWITTER_BEARER_TOKEN\",\n header: \"X-API-Key\",\n },\n credentialKeys: [\"TWITTER_BEARER_TOKEN\"],\n docsUrls: [\"https://twitterapi.io/docs\"],\n templateUses: [\"analytics\"],\n examples: [\n {\n label: \"User tweets\",\n method: \"GET\",\n path: \"/twitter/user/last_tweets\",\n },\n ],\n },\n};\n\nexport function getProviderApiConfig(\n provider: ProviderApiId | string,\n): ProviderApiConfig {\n const config = PROVIDER_CONFIGS[provider as ProviderApiId];\n if (!config) throw new Error(`Unsupported provider API: ${provider}`);\n return config;\n}\n\nexport function isProviderApiId(provider: string): provider is ProviderApiId {\n return Object.prototype.hasOwnProperty.call(PROVIDER_CONFIGS, provider);\n}\n\nexport function listProviderApiIdsForTemplateUse(\n templateUse: WorkspaceConnectionTemplateUse,\n): ProviderApiId[] {\n return PROVIDER_API_IDS.filter((id) =>\n (PROVIDER_CONFIGS[id].templateUses ?? []).includes(templateUse),\n );\n}\n\nexport function listProviderApiCatalog(\n provider?: ProviderApiId | string,\n options: { providerIds?: readonly (ProviderApiId | string)[] } = {},\n) {\n const providerIds = normalizeProviderIds(options.providerIds);\n if (provider) {\n assertProviderAllowed(provider, providerIds);\n }\n const configs = provider\n ? [getProviderApiConfig(provider)]\n : providerIds.map((id) => getProviderApiConfig(id));\n return configs.map((config) => ({\n id: config.id,\n label: config.label,\n defaultBaseUrl: config.defaultBaseUrl,\n baseUrlCredentialKey: config.baseUrlCredentialKey ?? null,\n auth: describeAuth(config.auth),\n credentialKeys: config.credentialKeys,\n docsUrls: config.docsUrls,\n specUrls: config.specUrls ?? [],\n allowedHostSuffixes: config.allowedHostSuffixes ?? [],\n placeholders: config.placeholders ?? [],\n defaultHeaders: config.defaultHeaders ?? {},\n examples: config.examples ?? [],\n notes: config.notes ?? [],\n corpusRecipes: config.corpusRecipes ?? [],\n templateUses: config.templateUses ?? [],\n }));\n}\n\nexport function createProviderApiRuntime(\n options: ProviderApiRuntimeOptions,\n): ProviderApiRuntime {\n const providerIds = normalizeProviderIds(options.providerIds);\n const runtimeOptions: Required<\n Pick<ProviderApiRuntimeOptions, \"appId\" | \"localCredentialSource\">\n > &\n Omit<ProviderApiRuntimeOptions, \"appId\" | \"localCredentialSource\"> = {\n ...options,\n providerIds,\n localCredentialSource: options.localCredentialSource ?? \"app_local\",\n };\n return {\n providerIds,\n listCatalog: (provider) =>\n listProviderApiCatalogWithCustom(\n provider,\n { providerIds },\n runtimeOptions,\n ),\n fetchDocs: (docsOptions) =>\n fetchProviderApiDocs(docsOptions, runtimeOptions),\n executeRequest: (args) => executeProviderApiRequest(args, runtimeOptions),\n };\n}\n\nexport async function fetchProviderApiDocs(\n options: ProviderApiDocsOptions,\n runtime: ProviderApiRuntimeOptions = { appId: \"app\" },\n) {\n await assertProviderAllowedAsync(options.provider, runtime);\n\n // Resolve config — may be a built-in or a custom provider.\n const builtIn = isProviderApiId(options.provider)\n ? getProviderApiConfig(options.provider)\n : null;\n const customConfig = builtIn\n ? null\n : await resolveCustomProvider(options.provider, runtime);\n\n if (!builtIn && !customConfig) {\n const known = await listAllProviderIds(runtime);\n throw new Error(\n `Unknown provider \"${options.provider}\". Known providers: ${known.join(\", \")}`,\n );\n }\n\n const catalog = builtIn\n ? listProviderApiCatalog(options.provider)[0]\n : customProviderToCatalogEntry(customConfig!);\n\n if (!options.url) {\n return {\n provider: options.provider,\n catalog,\n guidance:\n \"provider-api-docs can fetch ANY public http(s) URL — pass url to retrieve API documentation, OpenAPI specs, changelogs, or any public web page. Registered docsUrls above are curated starting points.\",\n };\n }\n\n // Open docs fetching: allow ANY public https/http URL.\n // The SSRF guard still applies — private/internal addresses are blocked.\n let url: URL;\n try {\n url = new URL(options.url);\n } catch {\n throw new Error(`Invalid docs URL: ${options.url}`);\n }\n if (url.protocol !== \"https:\" && url.protocol !== \"http:\") {\n throw new Error(`Docs URL must use https: or http: (got ${url.protocol})`);\n }\n if (await isBlockedExtensionUrlWithDns(url.href)) {\n throw new Error(`Blocked private/internal docs URL: ${url.href}`);\n }\n\n const response = await fetchWithTimeout(url.href, {\n method: \"GET\",\n maxBytes: clampMaxBytes(options.maxBytes),\n });\n\n const responseBody =\n response.text ??\n (response.json !== undefined ? JSON.stringify(response.json, null, 2) : \"\");\n const content = processWebContent({\n url: url.href,\n body: responseBody,\n contentType: response.contentType,\n responseMode: options.responseMode ?? \"auto\",\n extract: options.extract ?? \"readability\",\n includeLinks: options.includeLinks ?? true,\n search: options.search,\n maxChars: options.maxChars,\n });\n const responseForOutput =\n content.mode === \"raw\" ? response : compactProviderDocsResponse(response);\n\n return {\n provider: options.provider,\n catalog,\n request: { url: url.href },\n response: responseForOutput,\n ...(content.mode === \"raw\" ? {} : { content }),\n };\n}\n\nfunction compactProviderDocsResponse(response: ProviderApiHttpResponse) {\n return {\n status: response.status,\n statusText: response.statusText,\n ok: response.ok,\n elapsedMs: response.elapsedMs,\n headers: response.headers,\n contentType: response.contentType,\n size: response.size,\n truncated: response.truncated,\n };\n}\n\nexport async function executeProviderApiRequest(\n args: ProviderApiRequestArgs,\n runtime: ProviderApiRuntimeOptions,\n) {\n await assertProviderAllowedAsync(args.provider, runtime);\n\n // Check whether this is a built-in or custom provider.\n const builtIn = isProviderApiId(args.provider)\n ? getProviderApiConfig(args.provider)\n : null;\n const customConfig = builtIn\n ? null\n : await resolveCustomProvider(args.provider, runtime);\n\n if (!builtIn && !customConfig) {\n const known = await listAllProviderIds(runtime);\n throw new Error(\n `Unknown provider \"${args.provider}\". Known providers: ${known.join(\", \")}`,\n );\n }\n\n if (customConfig) {\n return executeCustomProviderApiRequest(args, customConfig, runtime);\n }\n\n // --- built-in provider path (original code) ---\n const config = builtIn!;\n const ctx = requireRuntimeCredentialContext(\n runtime,\n config.credentialKeys[0] ?? config.id,\n );\n const baseUrl = await resolveBaseUrl(config, runtime, ctx, args);\n const placeholders = await resolvePlaceholders(config, runtime, ctx, args);\n const method = normalizeMethod(args.method);\n const url = buildProviderUrl({\n config,\n baseUrl,\n rawPath: substituteString(args.path, placeholders),\n query: substituteUnknown(args.query, placeholders),\n });\n if (await isBlockedExtensionUrlWithDns(url.href)) {\n throw new Error(`Blocked private/internal provider URL: ${url.href}`);\n }\n\n const auth =\n args.auth === \"none\"\n ? emptyAuth()\n : await resolveAuth(config, runtime, ctx, args);\n const extraHeaders = substituteUnknown(args.headers ?? {}, placeholders);\n const headers = sanitizeOutboundHeaders({\n ...(config.defaultHeaders ?? {}),\n ...(isPlainRecord(extraHeaders) ? extraHeaders : {}),\n ...auth.headers,\n });\n\n // Allow a much larger maxBytes ceiling when writing to a workspace file.\n const effectiveMaxBytes = args.saveToFile\n ? SAVE_TO_FILE_MAX_BYTES\n : clampMaxBytes(args.maxBytes);\n const quotaIdentity = createProviderQuotaIdentity({\n appId: runtimeOptionsAppId(runtime),\n providerId: config.id,\n ctx,\n credentialSources: auth.credentialSources,\n connectionId: args.connectionId,\n accountId: args.accountId,\n });\n\n // --- fetchAllPages mode ---\n if (args.fetchAllPages) {\n const pageCfg = args.fetchAllPages;\n const { items, pageCount, lastStatus, lastContentType } =\n await fetchAllPages(pageCfg, async (extra) => {\n const queryWithCursor = extra?.query\n ? mergeQueryObjects(\n substituteUnknown(args.query, placeholders),\n extra.query,\n )\n : substituteUnknown(args.query, placeholders);\n const pageUrl = buildProviderUrl({\n config,\n baseUrl,\n rawPath: substituteString(args.path, placeholders),\n query: queryWithCursor,\n });\n const bodyWithCursor = extra?.bodyCursor\n ? setValueAtPath(\n substituteUnknown(args.body, placeholders),\n extra.bodyCursor.path,\n extra.bodyCursor.value,\n )\n : substituteUnknown(args.body, placeholders);\n const pageBody = prepareBody(bodyWithCursor, { ...headers });\n const requestKey = createProviderRequestDedupeKey({\n method,\n url: pageUrl.href,\n body: pageBody,\n headers,\n });\n const resp = await fetchWithTimeout(pageUrl.href, {\n method,\n headers,\n body: pageBody,\n maxBytes: effectiveMaxBytes,\n timeoutMs: clampTimeout(args.timeoutMs),\n secretValues: auth.secretValues,\n quota: {\n identity: quotaIdentity,\n method,\n target: describeProviderRequestTarget(\n pageUrl.href,\n auth.secretValues,\n ),\n requestKey,\n },\n });\n return {\n text:\n resp.text ??\n (resp.json !== undefined ? JSON.stringify(resp.json) : \"\"),\n contentType: resp.contentType,\n status: resp.status,\n ok: resp.ok,\n };\n });\n\n const allItemsJson = JSON.stringify(items, null, 2);\n const metadata = {\n provider: { id: config.id, label: config.label },\n pagesRead: pageCount,\n totalItems: Array.isArray(items) ? items.length : 0,\n lastStatus,\n };\n\n if (args.saveToFile) {\n const saved = (await handleSaveToFile(\n args.saveToFile,\n allItemsJson,\n lastContentType ?? \"application/json\",\n lastStatus,\n )) as Record<string, unknown>;\n return { ...metadata, ...saved };\n }\n\n return { ...metadata, items };\n }\n\n // --- Single request ---\n const body = prepareBody(substituteUnknown(args.body, placeholders), headers);\n const requestKey = createProviderRequestDedupeKey({\n method,\n url: url.href,\n body,\n headers,\n });\n const response = await fetchWithTimeout(url.href, {\n method,\n headers,\n body,\n maxBytes: effectiveMaxBytes,\n timeoutMs: clampTimeout(args.timeoutMs),\n secretValues: auth.secretValues,\n quota: {\n identity: quotaIdentity,\n method,\n target: describeProviderRequestTarget(url.href, auth.secretValues),\n requestKey,\n },\n });\n\n // saveToFile: write full body to workspace file and return compact summary.\n if (args.saveToFile) {\n const rawText =\n response.text ??\n (response.json !== undefined ? JSON.stringify(response.json) : \"\");\n const saved = (await handleSaveToFile(\n args.saveToFile,\n rawText,\n response.contentType,\n response.status,\n )) as Record<string, unknown>;\n return {\n provider: { id: config.id, label: config.label },\n request: {\n method,\n url: redactString(url.href, auth.secretValues),\n path: redactString(`${url.pathname}${url.search}`, auth.secretValues),\n },\n ...saved,\n };\n }\n\n return {\n provider: {\n id: config.id,\n label: config.label,\n docsUrls: config.docsUrls,\n specUrls: config.specUrls ?? [],\n },\n request: {\n method,\n url: redactString(url.href, auth.secretValues),\n path: redactString(`${url.pathname}${url.search}`, auth.secretValues),\n auth: args.auth === \"none\" ? \"none\" : describeAuth(config.auth),\n credentialSources: auth.credentialSources.map((source) => ({\n ...source,\n fingerprint: fingerprint(source.key),\n })),\n headerNames: Object.keys(headers).filter(\n (name) => name.toLowerCase() !== \"authorization\",\n ),\n ...(args.accountId ? { accountId: args.accountId } : {}),\n ...(args.connectionId ? { connectionId: args.connectionId } : {}),\n },\n response,\n guidance:\n \"This was a raw provider API request. Use provider docs/spec URLs to choose endpoints and include method/path/status plus relevant filters in the methodology. Prefer this escape hatch whenever canned actions are too narrow.\",\n };\n}\n\n// ---------------------------------------------------------------------------\n// Custom provider execution\n// ---------------------------------------------------------------------------\n\nasync function executeCustomProviderApiRequest(\n args: ProviderApiRequestArgs,\n customConfig: CustomProviderConfig,\n runtime: ProviderApiRuntimeOptions,\n): Promise<unknown> {\n const ctx = requireRuntimeCredentialContext(runtime, customConfig.id);\n const method = normalizeMethod(args.method);\n const baseUrl = customConfig.baseUrl;\n\n // Build a lightweight ProviderApiConfig-like object so we can reuse\n // buildProviderUrl (which validates allowed hosts).\n const syntheticConfig: ProviderApiConfig = {\n id: customConfig.id as ProviderApiId,\n label: customConfig.label,\n defaultBaseUrl: baseUrl,\n auth: { type: \"none\" },\n credentialKeys: [],\n docsUrls: customConfig.docsUrls,\n allowedHostSuffixes: customConfig.allowedHostSuffixes,\n defaultHeaders: customConfig.defaultHeaders,\n };\n\n const url = buildProviderUrl({\n config: syntheticConfig,\n baseUrl,\n rawPath: args.path,\n query: args.query,\n });\n\n if (await isBlockedExtensionUrlWithDns(url.href)) {\n throw new Error(`Blocked private/internal provider URL: ${url.href}`);\n }\n\n const auth =\n args.auth === \"none\"\n ? emptyAuth()\n : await resolveCustomAuth(customConfig, runtime, ctx, args);\n\n const extraHeaders = args.headers ?? {};\n const headers = sanitizeOutboundHeaders({\n ...(customConfig.defaultHeaders ?? {}),\n ...(isPlainRecord(extraHeaders) ? extraHeaders : {}),\n ...auth.headers,\n });\n const body = prepareBody(args.body, headers);\n\n const effectiveMaxBytes = args.saveToFile\n ? SAVE_TO_FILE_MAX_BYTES\n : clampMaxBytes(args.maxBytes);\n const quotaIdentity = createProviderQuotaIdentity({\n appId: runtimeOptionsAppId(runtime),\n providerId: customConfig.id,\n ctx,\n credentialSources: auth.credentialSources,\n connectionId: args.connectionId,\n accountId: args.accountId,\n });\n\n // --- fetchAllPages mode (same cursor pagination as built-in providers) ---\n if (args.fetchAllPages) {\n const pageCfg = args.fetchAllPages;\n const { items, pageCount, lastStatus, lastContentType } =\n await fetchAllPages(pageCfg, async (extra) => {\n const queryWithCursor = extra?.query\n ? mergeQueryObjects(args.query, extra.query)\n : args.query;\n const pageUrl = buildProviderUrl({\n config: syntheticConfig,\n baseUrl,\n rawPath: args.path,\n query: queryWithCursor,\n });\n const bodyWithCursor = extra?.bodyCursor\n ? setValueAtPath(\n args.body,\n extra.bodyCursor.path,\n extra.bodyCursor.value,\n )\n : args.body;\n const pageBody = prepareBody(bodyWithCursor, { ...headers });\n const requestKey = createProviderRequestDedupeKey({\n method,\n url: pageUrl.href,\n body: pageBody,\n headers,\n });\n const resp = await fetchWithTimeout(pageUrl.href, {\n method,\n headers,\n body: pageBody,\n maxBytes: effectiveMaxBytes,\n timeoutMs: clampTimeout(args.timeoutMs),\n secretValues: auth.secretValues,\n quota: {\n identity: quotaIdentity,\n method,\n target: describeProviderRequestTarget(\n pageUrl.href,\n auth.secretValues,\n ),\n requestKey,\n },\n });\n return {\n text:\n resp.text ??\n (resp.json !== undefined ? JSON.stringify(resp.json) : \"\"),\n contentType: resp.contentType,\n status: resp.status,\n ok: resp.ok,\n };\n });\n\n const allItemsJson = JSON.stringify(items, null, 2);\n const metadata = {\n provider: {\n id: customConfig.id,\n label: customConfig.label,\n custom: true,\n },\n pagesRead: pageCount,\n totalItems: Array.isArray(items) ? items.length : 0,\n lastStatus,\n };\n\n if (args.saveToFile) {\n const saved = (await handleSaveToFile(\n args.saveToFile,\n allItemsJson,\n lastContentType ?? \"application/json\",\n lastStatus,\n )) as Record<string, unknown>;\n return { ...metadata, ...saved };\n }\n\n return { ...metadata, items };\n }\n\n const response = await fetchWithTimeout(url.href, {\n method,\n headers,\n body,\n maxBytes: effectiveMaxBytes,\n timeoutMs: clampTimeout(args.timeoutMs),\n secretValues: auth.secretValues,\n quota: {\n identity: quotaIdentity,\n method,\n target: describeProviderRequestTarget(url.href, auth.secretValues),\n requestKey: createProviderRequestDedupeKey({\n method,\n url: url.href,\n body,\n headers,\n }),\n },\n });\n\n if (args.saveToFile) {\n const rawText =\n response.text ??\n (response.json !== undefined ? JSON.stringify(response.json) : \"\");\n const saved = (await handleSaveToFile(\n args.saveToFile,\n rawText,\n response.contentType,\n response.status,\n )) as Record<string, unknown>;\n return {\n provider: {\n id: customConfig.id,\n label: customConfig.label,\n custom: true,\n },\n request: {\n method,\n url: redactString(url.href, auth.secretValues),\n path: redactString(`${url.pathname}${url.search}`, auth.secretValues),\n },\n ...saved,\n };\n }\n\n return {\n provider: {\n id: customConfig.id,\n label: customConfig.label,\n docsUrls: customConfig.docsUrls,\n specUrls: [],\n custom: true,\n },\n request: {\n method,\n url: redactString(url.href, auth.secretValues),\n path: redactString(`${url.pathname}${url.search}`, auth.secretValues),\n auth:\n args.auth === \"none\" ? \"none\" : describeCustomAuth(customConfig.auth),\n credentialSources: auth.credentialSources.map((source) => ({\n ...source,\n fingerprint: fingerprint(source.key),\n })),\n headerNames: Object.keys(headers).filter(\n (name) => name.toLowerCase() !== \"authorization\",\n ),\n },\n response,\n guidance:\n \"This was a raw provider API request to a custom provider. Use provider docs URLs to choose endpoints.\",\n };\n}\n\nasync function resolveCustomAuth(\n customConfig: CustomProviderConfig,\n runtime: ProviderApiRuntimeOptions,\n ctx: CredentialContext,\n args: ProviderApiRequestArgs,\n): Promise<ResolvedAuth> {\n const auth = customConfig.auth;\n if (auth.type === \"none\") return emptyAuth();\n\n if (auth.type === \"bearer\") {\n const credential = await resolveRequiredCredentialByKey({\n provider: customConfig.id,\n key: auth.credentialKey,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n return {\n headers: { Authorization: `Bearer ${credential.value}` },\n credentialSources: [omitCredentialValue(credential)],\n secretValues: [credential.value],\n };\n }\n\n if (auth.type === \"basic\") {\n const username = await resolveRequiredCredentialByKey({\n provider: customConfig.id,\n key: auth.usernameKey,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n const password =\n auth.passwordKey === auth.usernameKey\n ? username\n : await resolveRequiredCredentialByKey({\n provider: customConfig.id,\n key: auth.passwordKey,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n const encoded = Buffer.from(`${username.value}:${password.value}`).toString(\n \"base64\",\n );\n return {\n headers: { Authorization: `Basic ${encoded}` },\n credentialSources: [\n omitCredentialValue(username),\n ...(password.key === username.key\n ? []\n : [omitCredentialValue(password)]),\n ],\n secretValues: [username.value, password.value, encoded],\n };\n }\n\n if (auth.type === \"api-key-header\") {\n const credential = await resolveRequiredCredentialByKey({\n provider: customConfig.id,\n key: auth.credentialKey,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n return {\n headers: { [auth.headerName]: credential.value },\n credentialSources: [omitCredentialValue(credential)],\n secretValues: [credential.value],\n };\n }\n\n return emptyAuth();\n}\n\n/** Resolve a credential by key name (no workspace-provider lookup for custom). */\nasync function resolveRequiredCredentialByKey(options: {\n provider: string;\n key: string;\n ctx: CredentialContext;\n runtime: ProviderApiRuntimeOptions;\n connectionId?: string | null;\n}): Promise<ProviderApiResolvedCredential> {\n const localCredentialSource =\n options.runtime.localCredentialSource ?? \"app_local\";\n const lookup: ProviderApiCredentialLookupOptions = {\n appId: options.runtime.appId,\n provider: options.provider,\n key: options.key,\n ctx: options.ctx,\n workspaceProvider: undefined,\n connectionId: options.connectionId,\n localCredentialSource,\n };\n const resolver =\n options.runtime.resolveCredential ?? defaultProviderApiCredentialResolver;\n const credential = await resolver(lookup);\n if (!credential?.value) {\n throw new Error(\n `Credential \"${options.key}\" not configured for custom provider \"${options.provider}\".`,\n );\n }\n return credential;\n}\n\nfunction describeCustomAuth(auth: CustomProviderAuthKind): string {\n if (auth.type === \"none\") return \"none\";\n if (auth.type === \"bearer\") return \"bearer\";\n if (auth.type === \"basic\") return \"basic\";\n if (auth.type === \"api-key-header\")\n return `api-key-header:${auth.headerName}`;\n return \"unknown\";\n}\n\n// ---------------------------------------------------------------------------\n// Catalog helpers with custom provider support\n// ---------------------------------------------------------------------------\n\n/**\n * Convert a custom provider to the same catalog shape as built-in providers.\n */\nfunction customProviderToCatalogEntry(config: CustomProviderConfig) {\n return {\n id: config.id,\n label: config.label,\n defaultBaseUrl: config.baseUrl,\n baseUrlCredentialKey: null,\n auth: describeCustomAuth(config.auth),\n credentialKeys: extractCredentialKeysFromCustomAuth(config.auth),\n docsUrls: config.docsUrls,\n specUrls: [] as string[],\n allowedHostSuffixes: config.allowedHostSuffixes,\n placeholders: [] as unknown[],\n defaultHeaders: config.defaultHeaders,\n examples: [] as unknown[],\n notes: config.notes ? [config.notes] : ([] as string[]),\n corpusRecipes: [] as unknown[],\n templateUses: [] as string[],\n custom: true,\n };\n}\n\nfunction extractCredentialKeysFromCustomAuth(\n auth: CustomProviderAuthKind,\n): string[] {\n if (auth.type === \"bearer\") return [auth.credentialKey];\n if (auth.type === \"basic\") {\n return auth.usernameKey === auth.passwordKey\n ? [auth.usernameKey]\n : [auth.usernameKey, auth.passwordKey];\n }\n if (auth.type === \"api-key-header\") return [auth.credentialKey];\n return [];\n}\n\n/**\n * List catalog entries including custom providers (merged after built-ins).\n */\nasync function listProviderApiCatalogWithCustom(\n provider: ProviderApiId | string | undefined,\n options: { providerIds?: readonly (ProviderApiId | string)[] },\n runtime: ProviderApiRuntimeOptions,\n): Promise<unknown[]> {\n const customConfigs = runtime.getCustomProviders\n ? await runtime.getCustomProviders()\n : [];\n\n if (provider) {\n // Check built-ins first\n if (isProviderApiId(provider)) {\n return listProviderApiCatalog(provider, options) as unknown[];\n }\n // Check custom\n const custom = customConfigs.find((c) => c.id === provider);\n if (custom) return [customProviderToCatalogEntry(custom)];\n const known = [\n ...normalizeProviderIds(options.providerIds),\n ...customConfigs.map((c) => c.id),\n ];\n throw new Error(\n `Unknown provider \"${provider}\". Known providers: ${known.join(\", \")}`,\n );\n }\n\n const builtInEntries = listProviderApiCatalog(\n undefined,\n options,\n ) as unknown[];\n const builtInIds = new Set(\n (options.providerIds ?? PROVIDER_API_IDS).map(String),\n );\n const customEntries = customConfigs\n .filter((c) => !builtInIds.has(c.id))\n .map(customProviderToCatalogEntry);\n return [...builtInEntries, ...customEntries];\n}\n\n/**\n * Look up a custom provider by id from the runtime loader.\n */\nasync function resolveCustomProvider(\n id: string,\n runtime: ProviderApiRuntimeOptions,\n): Promise<CustomProviderConfig | null> {\n if (!runtime.getCustomProviders) return null;\n const configs = await runtime.getCustomProviders();\n return configs.find((c) => c.id === id) ?? null;\n}\n\n/**\n * List all provider ids (built-in + custom) visible to this runtime.\n */\nasync function listAllProviderIds(\n runtime: ProviderApiRuntimeOptions,\n): Promise<string[]> {\n const builtIn = normalizeProviderIds(runtime.providerIds).map(String);\n if (!runtime.getCustomProviders) return builtIn;\n const custom = await runtime.getCustomProviders();\n return [...builtIn, ...custom.map((c) => c.id)];\n}\n\n/**\n * Assert that a provider is either a known built-in or a registered custom\n * provider. Throws with a descriptive message listing known providers.\n */\nasync function assertProviderAllowedAsync(\n provider: string,\n runtime: ProviderApiRuntimeOptions,\n): Promise<void> {\n // Built-in check (fast path)\n if (isProviderApiId(provider)) {\n // Still check the providerIds whitelist if set\n const allowed = normalizeProviderIds(runtime.providerIds);\n if (!allowed.includes(provider as ProviderApiId)) {\n throw new Error(`Provider API ${provider} is not enabled for this app.`);\n }\n return;\n }\n // Custom provider check\n const custom = await resolveCustomProvider(provider, runtime);\n if (custom) return;\n const known = await listAllProviderIds(runtime);\n throw new Error(\n `Unknown provider \"${provider}\". Known providers: ${known.join(\", \")}`,\n );\n}\n\nexport async function defaultProviderApiCredentialResolver(\n options: ProviderApiCredentialLookupOptions,\n): Promise<ProviderApiResolvedCredential | null> {\n if (options.workspaceProvider) {\n const result = await resolveWorkspaceConnectionCredentialForApp({\n appId: options.appId,\n provider: options.workspaceProvider,\n key: options.key,\n connectionId: options.connectionId,\n userEmail: options.ctx.userEmail,\n orgId: options.ctx.orgId,\n });\n if (result.available && result.value) {\n return {\n key: result.provenance?.resolvedKey ?? result.key,\n value: result.value,\n source: \"workspace_connection\",\n provider: result.provider,\n connectionId: result.provenance?.connectionId,\n connectionLabel: result.provenance?.connectionLabel,\n scope:\n typeof result.provenance?.secretScope === \"string\"\n ? result.provenance.secretScope\n : undefined,\n };\n }\n }\n\n const value = await resolveCredential(options.key, options.ctx);\n if (!value) return null;\n return {\n key: options.key,\n value,\n source: options.localCredentialSource,\n provider: options.provider,\n };\n}\n\nfunction normalizeProviderIds(\n providerIds?: readonly (ProviderApiId | string)[],\n): ProviderApiId[] {\n if (!providerIds) return [...PROVIDER_API_IDS];\n const result: ProviderApiId[] = [];\n const seen = new Set<string>();\n for (const providerId of providerIds) {\n if (!isProviderApiId(providerId)) {\n throw new Error(`Unsupported provider API: ${providerId}`);\n }\n if (seen.has(providerId)) continue;\n seen.add(providerId);\n result.push(providerId);\n }\n return result;\n}\n\nfunction assertProviderAllowed(\n provider: ProviderApiId | string,\n providerIds?: readonly (ProviderApiId | string)[],\n) {\n const allowed = normalizeProviderIds(providerIds);\n if (!allowed.includes(provider as ProviderApiId)) {\n throw new Error(`Provider API ${provider} is not enabled for this app.`);\n }\n}\n\nfunction describeAuth(auth: ProviderApiAuthKind): string {\n if (auth.type === \"none\") return \"none\";\n if (auth.type === \"bearer\") return \"bearer\";\n if (auth.type === \"basic\") return \"basic\";\n if (auth.type === \"basic-raw\") return \"basic\";\n if (auth.type === \"api-key-header\") return `api-key-header:${auth.header}`;\n if (auth.type === \"google-service-account\") return \"google-service-account\";\n if (auth.type === \"oauth-bearer\") return `oauth-bearer:${auth.oauthProvider}`;\n return \"prometheus-basic-or-bearer\";\n}\n\nfunction requireRuntimeCredentialContext(\n runtime: ProviderApiRuntimeOptions,\n credentialKey: string,\n): CredentialContext {\n const ctx = runtime.getCredentialContext?.() ?? getCredentialContext();\n if (!ctx) {\n throw new Error(\n `Cannot resolve credential \"${credentialKey}\" outside an authenticated request context.`,\n );\n }\n return ctx;\n}\n\nasync function resolveBaseUrl(\n config: ProviderApiConfig,\n runtime: ProviderApiRuntimeOptions,\n ctx: CredentialContext,\n args: ProviderApiRequestArgs,\n): Promise<string> {\n if (!config.baseUrlCredentialKey) return config.defaultBaseUrl;\n const configured = await resolveCredentialValue({\n config,\n runtime,\n ctx,\n key: config.baseUrlCredentialKey,\n args,\n });\n return (configured || config.defaultBaseUrl).replace(/\\/+$/, \"\");\n}\n\nasync function resolvePlaceholders(\n config: ProviderApiConfig,\n runtime: ProviderApiRuntimeOptions,\n ctx: CredentialContext,\n args: ProviderApiRequestArgs,\n): Promise<Record<string, string>> {\n const placeholders: Record<string, string> = {};\n for (const placeholder of config.placeholders ?? []) {\n const value = await resolveCredentialValue({\n config,\n runtime,\n ctx,\n key: placeholder.credentialKey,\n args,\n });\n if (value) placeholders[placeholder.name] = value;\n }\n return placeholders;\n}\n\nasync function resolveCredentialValue(options: {\n config: ProviderApiConfig;\n runtime: ProviderApiRuntimeOptions;\n ctx: CredentialContext;\n key: string;\n args: ProviderApiRequestArgs;\n workspaceProvider?: string;\n}): Promise<string | undefined> {\n const credential = await resolveOptionalCredential({\n provider: options.config.id,\n workspaceProvider: options.workspaceProvider,\n key: options.key,\n ctx: options.ctx,\n runtime: options.runtime,\n connectionId: options.args.connectionId,\n });\n return credential?.value;\n}\n\nfunction substituteString(\n value: string,\n placeholders: Record<string, string>,\n): string {\n let result = value;\n for (const [name, replacement] of Object.entries(placeholders)) {\n result = result.split(`{${name}}`).join(replacement);\n }\n return result;\n}\n\nfunction substituteUnknown(\n value: unknown,\n placeholders: Record<string, string>,\n): unknown {\n if (typeof value === \"string\") return substituteString(value, placeholders);\n if (Array.isArray(value)) {\n return value.map((item) => substituteUnknown(item, placeholders));\n }\n if (value && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [\n key,\n substituteUnknown(entry, placeholders),\n ]),\n );\n }\n return value;\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction buildProviderUrl(options: {\n config: ProviderApiConfig;\n baseUrl: string;\n rawPath: string;\n query: unknown;\n}): URL {\n const base = new URL(options.baseUrl);\n const rawPath = options.rawPath.trim();\n const url = /^https?:\\/\\//i.test(rawPath)\n ? new URL(rawPath)\n : new URL(joinProviderUrlPath(base, rawPath), base.origin);\n\n if (!isAllowedProviderUrl(url, base, options.config)) {\n throw new Error(\n `${options.config.label} API requests must stay on the configured provider host or registered provider host suffix.`,\n );\n }\n\n for (const [key, value] of queryEntries(options.query)) {\n url.searchParams.append(key, value);\n }\n\n return url;\n}\n\nfunction joinProviderUrlPath(base: URL, rawPath: string): string {\n const basePath = base.pathname.replace(/\\/+$/, \"\");\n const providerPath = rawPath.replace(/^\\/+/, \"\");\n if (!providerPath) return basePath || \"/\";\n const baseSegments = basePath.split(\"/\").filter(Boolean);\n const providerSegments = providerPath.split(\"/\").filter(Boolean);\n if (\n baseSegments.length > 0 &&\n providerSegments.length >= baseSegments.length &&\n baseSegments.every((segment, index) => segment === providerSegments[index])\n ) {\n return `/${providerPath}`;\n }\n return `${basePath}/${providerPath}`;\n}\n\nfunction isAllowedProviderUrl(\n url: URL,\n base: URL,\n config: ProviderApiConfig,\n): boolean {\n if (url.protocol !== \"https:\" && url.protocol !== \"http:\") return false;\n if (url.origin === base.origin) return true;\n const host = url.hostname.toLowerCase();\n return (config.allowedHostSuffixes ?? []).some((suffix) => {\n const normalized = suffix.toLowerCase().replace(/^\\./, \"\");\n return host === normalized || host.endsWith(`.${normalized}`);\n });\n}\n\nfunction queryEntries(value: unknown): Array<[string, string]> {\n if (!value) return [];\n if (typeof value === \"string\") {\n const params = new URLSearchParams(value.replace(/^\\?/, \"\"));\n return Array.from(params.entries());\n }\n if (typeof value !== \"object\" || Array.isArray(value)) return [];\n const entries: Array<[string, string]> = [];\n for (const [key, raw] of Object.entries(value)) {\n if (raw === undefined || raw === null) continue;\n if (Array.isArray(raw)) {\n for (const item of raw) entries.push([key, String(item)]);\n } else {\n entries.push([key, String(raw)]);\n }\n }\n return entries;\n}\n\nasync function resolveAuth(\n config: ProviderApiConfig,\n runtime: ProviderApiRuntimeOptions,\n ctx: CredentialContext,\n args: ProviderApiRequestArgs,\n): Promise<ResolvedAuth> {\n const auth = config.auth;\n if (auth.type === \"none\") return emptyAuth();\n if (auth.type === \"bearer\") {\n const credential = await resolveAnyCredential({\n provider: config.id,\n workspaceProvider: auth.workspaceProvider,\n keys: auth.keys,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n return {\n headers: { Authorization: `Bearer ${credential.value}` },\n credentialSources: [omitCredentialValue(credential)],\n secretValues: [credential.value],\n };\n }\n if (auth.type === \"basic\") {\n const username = await resolveRequiredCredential({\n provider: config.id,\n workspaceProvider: auth.workspaceProvider,\n key: auth.usernameKey,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n const password =\n auth.passwordKey === auth.usernameKey\n ? username\n : await resolveRequiredCredential({\n provider: config.id,\n workspaceProvider: auth.workspaceProvider,\n key: auth.passwordKey,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n const encoded = Buffer.from(`${username.value}:${password.value}`).toString(\n \"base64\",\n );\n return {\n headers: { Authorization: `Basic ${encoded}` },\n credentialSources: [\n omitCredentialValue(username),\n ...(password.key === username.key\n ? []\n : [omitCredentialValue(password)]),\n ],\n secretValues: [username.value, password.value, encoded],\n };\n }\n if (auth.type === \"basic-raw\") {\n const credential = await resolveRequiredCredential({\n provider: config.id,\n workspaceProvider: auth.workspaceProvider,\n key: auth.key,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n const encoded = Buffer.from(credential.value).toString(\"base64\");\n return {\n headers: { Authorization: `Basic ${encoded}` },\n credentialSources: [omitCredentialValue(credential)],\n secretValues: [credential.value, encoded],\n };\n }\n if (auth.type === \"api-key-header\") {\n const credential = await resolveRequiredCredential({\n provider: config.id,\n workspaceProvider: auth.workspaceProvider,\n key: auth.key,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n return {\n headers: { [auth.header]: credential.value },\n credentialSources: [omitCredentialValue(credential)],\n secretValues: [credential.value],\n };\n }\n if (auth.type === \"google-service-account\") {\n const token = await getGoogleServiceAccountToken(auth.scopes, runtime, ctx);\n return {\n headers: { Authorization: `Bearer ${token}` },\n credentialSources: [\n {\n key: \"GOOGLE_APPLICATION_CREDENTIALS_JSON\",\n provider: config.id,\n source: runtime.localCredentialSource ?? \"app_local\",\n },\n ],\n secretValues: [token],\n };\n }\n if (auth.type === \"oauth-bearer\") {\n const oauthProvider =\n runtime.oauthProviderOverrides?.[config.id] ?? auth.oauthProvider;\n const credential = await resolveOAuthBearerToken({\n auth: { ...auth, oauthProvider },\n ctx,\n accountId: args.accountId,\n });\n return {\n headers: { Authorization: `Bearer ${credential.value}` },\n credentialSources: [omitCredentialValue(credential)],\n secretValues: [credential.value],\n };\n }\n\n const bearer = await resolveCredentialValue({\n config,\n runtime,\n ctx,\n key: \"PROMETHEUS_BEARER_TOKEN\",\n args,\n });\n if (bearer) {\n return {\n headers: { Authorization: `Bearer ${bearer}` },\n credentialSources: [\n {\n key: \"PROMETHEUS_BEARER_TOKEN\",\n provider: config.id,\n source: runtime.localCredentialSource ?? \"app_local\",\n },\n ],\n secretValues: [bearer],\n };\n }\n const username = await resolveCredentialValue({\n config,\n runtime,\n ctx,\n key: \"PROMETHEUS_USERNAME\",\n args,\n });\n const password = await resolveCredentialValue({\n config,\n runtime,\n ctx,\n key: \"PROMETHEUS_PASSWORD\",\n args,\n });\n if (username && password) {\n const encoded = Buffer.from(`${username}:${password}`).toString(\"base64\");\n return {\n headers: { Authorization: `Basic ${encoded}` },\n credentialSources: [\n {\n key: \"PROMETHEUS_USERNAME\",\n provider: config.id,\n source: runtime.localCredentialSource ?? \"app_local\",\n },\n {\n key: \"PROMETHEUS_PASSWORD\",\n provider: config.id,\n source: runtime.localCredentialSource ?? \"app_local\",\n },\n ],\n secretValues: [username, password, encoded],\n };\n }\n return emptyAuth();\n}\n\nfunction emptyAuth(): ResolvedAuth {\n return { headers: {}, credentialSources: [], secretValues: [] };\n}\n\nasync function resolveAnyCredential(options: {\n provider: ProviderApiId;\n workspaceProvider: string | undefined;\n keys: readonly string[];\n ctx: CredentialContext;\n runtime: ProviderApiRuntimeOptions;\n connectionId?: string | null;\n}): Promise<ProviderApiResolvedCredential> {\n for (const key of options.keys) {\n const credential = await resolveOptionalCredential({ ...options, key });\n if (credential?.value) return credential;\n }\n throw new Error(\n `${options.provider} credential not configured. Tried: ${options.keys.join(\n \", \",\n )}`,\n );\n}\n\nasync function resolveRequiredCredential(options: {\n provider: ProviderApiId;\n workspaceProvider: string | undefined;\n key: string;\n ctx: CredentialContext;\n runtime: ProviderApiRuntimeOptions;\n connectionId?: string | null;\n}): Promise<ProviderApiResolvedCredential> {\n const credential = await resolveOptionalCredential(options);\n if (!credential?.value) throw new Error(`${options.key} not configured`);\n return credential;\n}\n\nasync function resolveOptionalCredential(options: {\n provider: ProviderApiId;\n workspaceProvider: string | undefined;\n key: string;\n ctx: CredentialContext;\n runtime: ProviderApiRuntimeOptions;\n connectionId?: string | null;\n}): Promise<ProviderApiResolvedCredential | null> {\n const localCredentialSource =\n options.runtime.localCredentialSource ?? \"app_local\";\n const lookup: ProviderApiCredentialLookupOptions = {\n appId: options.runtime.appId,\n provider: options.provider,\n key: options.key,\n ctx: options.ctx,\n workspaceProvider: options.workspaceProvider,\n connectionId: options.connectionId,\n localCredentialSource,\n };\n if (options.runtime.resolveCredential) {\n return options.runtime.resolveCredential(lookup);\n }\n return defaultProviderApiCredentialResolver(lookup);\n}\n\nfunction omitCredentialValue(\n credential: ProviderApiResolvedCredential,\n): Omit<ProviderApiResolvedCredential, \"value\"> {\n const { value: _value, ...rest } = credential;\n return rest;\n}\n\nconst googleServiceTokenCache = new Map<\n string,\n { token: string; expiresAt: number }\n>();\n\nasync function getGoogleServiceAccountToken(\n scopes: readonly string[],\n runtime: ProviderApiRuntimeOptions,\n ctx: CredentialContext,\n): Promise<string> {\n const cacheKey = createHash(\"sha256\")\n .update(\n `${runtime.appId}:${ctx.orgId ?? ctx.userEmail}:${scopes.join(\" \")}`,\n )\n .digest(\"hex\");\n const cached = googleServiceTokenCache.get(cacheKey);\n if (cached && Date.now() < cached.expiresAt - 30_000) return cached.token;\n\n const credsJson = await resolveCredentialValue({\n config: getProviderApiConfig(\"gcloud\"),\n runtime,\n ctx,\n key: \"GOOGLE_APPLICATION_CREDENTIALS_JSON\",\n args: { provider: \"gcloud\", path: \"/\" },\n });\n if (!credsJson) {\n throw new Error(\"GOOGLE_APPLICATION_CREDENTIALS_JSON not configured\");\n }\n let creds: {\n type?: string;\n client_email?: string;\n private_key?: string;\n token_uri?: string;\n };\n try {\n creds = JSON.parse(credsJson) as typeof creds;\n } catch {\n throw new Error(\n \"GOOGLE_APPLICATION_CREDENTIALS_JSON is not valid JSON. Upload a service account JSON key.\",\n );\n }\n if (!creds.client_email || !creds.private_key) {\n throw new Error(\n \"GOOGLE_APPLICATION_CREDENTIALS_JSON must be a service account JSON key.\",\n );\n }\n\n const now = Math.floor(Date.now() / 1000);\n const aud = creds.token_uri || \"https://oauth2.googleapis.com/token\";\n const jwt = await signRs256Jwt(\n {\n iss: creds.client_email,\n scope: scopes.join(\" \"),\n aud,\n iat: now,\n exp: now + 3600,\n },\n creds.private_key,\n );\n const res = await fetch(aud, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams({\n grant_type: \"urn:ietf:params:oauth:grant-type:jwt-bearer\",\n assertion: jwt,\n }),\n });\n if (!res.ok) {\n throw new Error(`Google OAuth error ${res.status}: ${await res.text()}`);\n }\n const data = (await res.json()) as {\n access_token: string;\n expires_in?: number;\n };\n googleServiceTokenCache.set(cacheKey, {\n token: data.access_token,\n expiresAt: Date.now() + (data.expires_in ?? 3600) * 1000,\n });\n return data.access_token;\n}\n\nasync function resolveOAuthBearerToken(options: {\n auth: Extract<ProviderApiAuthKind, { type: \"oauth-bearer\" }>;\n ctx: CredentialContext;\n accountId?: string | null;\n}): Promise<ProviderApiResolvedCredential> {\n const accounts = await listOAuthAccountsByOwner(\n options.auth.oauthProvider,\n options.ctx.userEmail,\n );\n if (accounts.length === 0) {\n throw new Error(\n `${options.auth.tokenLabel} is not connected for ${options.ctx.userEmail}.`,\n );\n }\n const accountId = options.accountId?.trim();\n const account = accountId\n ? accounts.find((entry) => entry.accountId === accountId)\n : accounts[0];\n if (!account) {\n throw new Error(\n `${options.auth.tokenLabel} account ${accountId} is not available to ${options.ctx.userEmail}.`,\n );\n }\n const tokens = account.tokens as OAuthTokens;\n const token = await getValidOAuthAccessToken({\n oauthProvider: options.auth.oauthProvider,\n accountId: account.accountId,\n ownerEmail: options.ctx.userEmail,\n tokens,\n });\n return {\n key: `${options.auth.oauthProvider.toUpperCase()}_OAUTH_TOKEN`,\n value: token,\n source: \"oauth_token\",\n provider: options.auth.oauthProvider,\n accountId: account.accountId,\n accountLabel: account.displayName,\n };\n}\n\nasync function getValidOAuthAccessToken(options: {\n oauthProvider: string;\n accountId: string;\n ownerEmail: string;\n tokens: OAuthTokens;\n}): Promise<string> {\n const accessToken =\n options.tokens.access_token ?? options.tokens.accessToken ?? \"\";\n if (!accessToken) {\n throw new Error(\n `${options.oauthProvider} OAuth account has no access token.`,\n );\n }\n const expiresAt = options.tokens.expiry_date ?? options.tokens.expiresAt;\n if (\n !expiresAt ||\n !Number.isFinite(expiresAt) ||\n expiresAt > Date.now() + 60_000\n ) {\n return accessToken;\n }\n\n const refreshToken =\n options.tokens.refresh_token ?? options.tokens.refreshToken;\n if (!refreshToken) return accessToken;\n if (\n options.oauthProvider === \"google\" ||\n options.oauthProvider === \"google-docs\"\n ) {\n return refreshGoogleOAuthToken(options, refreshToken);\n }\n throw new Error(\n `${options.oauthProvider} OAuth token is expired and automatic refresh is not configured for provider-api.`,\n );\n}\n\nasync function refreshGoogleOAuthToken(\n options: {\n oauthProvider: string;\n accountId: string;\n ownerEmail: string;\n tokens: OAuthTokens;\n },\n refreshToken: string,\n): Promise<string> {\n const clientId = process.env.GOOGLE_CLIENT_ID;\n const clientSecret = process.env.GOOGLE_CLIENT_SECRET;\n if (!clientId || !clientSecret) {\n throw new Error(\n \"GOOGLE_CLIENT_ID/SECRET not set for Google OAuth refresh.\",\n );\n }\n const res = await fetch(\"https://oauth2.googleapis.com/token\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams({\n refresh_token: refreshToken,\n client_id: clientId,\n client_secret: clientSecret,\n grant_type: \"refresh_token\",\n }),\n });\n const data = (await res.json()) as {\n access_token?: string;\n expires_in?: number;\n token_type?: string;\n scope?: string;\n error?: string;\n error_description?: string;\n };\n if (!res.ok || !data.access_token) {\n if (data.error && PERMANENT_GOOGLE_OAUTH_REFRESH_ERRORS.has(data.error)) {\n await deleteOAuthTokens(options.oauthProvider, options.accountId);\n }\n const detail = data.error_description ?? data.error ?? res.statusText;\n throw new Error(`Google OAuth refresh failed: ${detail}`);\n }\n const merged: OAuthTokens = {\n ...options.tokens,\n access_token: data.access_token,\n expiry_date: Date.now() + (data.expires_in ?? 3600) * 1000,\n token_type: data.token_type ?? options.tokens.token_type,\n scope: data.scope ?? options.tokens.scope,\n };\n await saveOAuthTokens(\n options.oauthProvider,\n options.accountId,\n merged as unknown as Record<string, unknown>,\n options.ownerEmail,\n );\n return data.access_token;\n}\n\nfunction normalizeMethod(\n method: ProviderApiMethod | undefined,\n): ProviderApiMethod {\n const normalized = String(method || \"GET\").toUpperCase();\n if (\n normalized === \"GET\" ||\n normalized === \"POST\" ||\n normalized === \"PUT\" ||\n normalized === \"PATCH\" ||\n normalized === \"DELETE\" ||\n normalized === \"HEAD\"\n ) {\n return normalized;\n }\n throw new Error(`Unsupported HTTP method: ${method}`);\n}\n\nfunction sanitizeOutboundHeaders(value: unknown): Record<string, string> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return {};\n const headers: Record<string, string> = {};\n for (const [name, rawValue] of Object.entries(value)) {\n const lower = name.toLowerCase();\n if (!HEADER_NAME_RE.test(name) || BLOCKED_OUTBOUND_HEADERS.has(lower)) {\n continue;\n }\n if (rawValue === undefined || rawValue === null) continue;\n const headerValue = String(rawValue);\n if (/[\\r\\n]/.test(headerValue)) continue;\n headers[name] = headerValue;\n }\n return headers;\n}\n\nfunction prepareBody(\n body: unknown,\n headers: Record<string, string>,\n): BodyInit | undefined {\n if (body === undefined || body === null) return undefined;\n if (typeof body === \"string\") return body;\n const hasContentType = Object.keys(headers).some(\n (name) => name.toLowerCase() === \"content-type\",\n );\n if (!hasContentType) headers[\"Content-Type\"] = \"application/json\";\n return JSON.stringify(body);\n}\n\nfunction runtimeOptionsAppId(runtime: ProviderApiRuntimeOptions): string {\n return runtime.appId || \"app\";\n}\n\nasync function fetchWithTimeout(\n optionsUrl: string,\n options: {\n method?: ProviderApiMethod;\n headers?: Record<string, string>;\n body?: BodyInit;\n timeoutMs?: number;\n maxBytes?: number;\n secretValues?: string[];\n quota?: ProviderApiFetchQuotaOptions;\n },\n): Promise<ProviderApiHttpResponse> {\n const runOnce = async (): Promise<ProviderApiHttpResponse> => {\n const controller = new AbortController();\n const timeoutMs = clampTimeout(options.timeoutMs);\n const timeout = setTimeout(() => controller.abort(), timeoutMs);\n const method = options.method ?? \"GET\";\n const secretValues = options.secretValues ?? [];\n try {\n const dispatcher = (await createSsrfSafeDispatcher()) ?? undefined;\n const fetchOptions: RequestInit & { dispatcher?: unknown } = {\n method,\n headers: options.headers,\n body: options.body,\n signal: controller.signal,\n redirect: \"manual\",\n };\n if (dispatcher) fetchOptions.dispatcher = dispatcher;\n try {\n return await fetchProviderResponse(optionsUrl, fetchOptions, {\n maxBytes: options.maxBytes,\n secretValues,\n });\n } catch (error) {\n if (dispatcher && isDispatcherCompatibilityError(error)) {\n const fallbackOptions = { ...fetchOptions };\n delete fallbackOptions.dispatcher;\n return await fetchProviderResponse(optionsUrl, fallbackOptions, {\n maxBytes: options.maxBytes,\n secretValues,\n });\n }\n throw error;\n }\n } catch (error) {\n throw normalizeFetchError(error, {\n method,\n url: optionsUrl,\n timeoutMs,\n secretValues,\n });\n } finally {\n clearTimeout(timeout);\n }\n };\n\n if (options.quota) {\n return executeWithProviderQuota({\n request: {\n identity: options.quota.identity,\n method: options.quota.method,\n target: options.quota.target,\n requestKey: options.quota.requestKey,\n },\n execute: runOnce,\n inspect: (result) => ({\n status: result.status,\n headers: result.headers,\n }),\n buildQuotaExhaustedResult: providerQuotaExhaustedResponse,\n });\n }\n\n return runOnce();\n}\n\nfunction providerQuotaExhaustedResponse(\n detail: ProviderQuotaExhaustedDetail,\n): ProviderApiHttpResponse {\n const retryAfterSeconds = Math.max(0, Math.ceil(detail.retryAfterMs / 1000));\n return {\n status: 429,\n statusText: \"Provider quota cooldown\",\n ok: false,\n elapsedMs: 0,\n headers: {\n \"retry-after\": String(retryAfterSeconds),\n \"x-agent-native-provider-quota\": \"exhausted\",\n },\n contentType: \"application/json\",\n size: 0,\n truncated: false,\n json: {\n error: \"provider_quota_exhausted\",\n provider: detail.providerId,\n message:\n `Provider API quota is cooling down for ${detail.providerId}. ` +\n `Retry after ${detail.retryAt}.`,\n retryAt: detail.retryAt,\n retryAfterMs: detail.retryAfterMs,\n reason: detail.reason,\n method: detail.method,\n target: detail.target,\n },\n quota: {\n exhausted: true,\n providerId: detail.providerId,\n retryAfterMs: detail.retryAfterMs,\n retryAt: detail.retryAt,\n reason: detail.reason,\n },\n };\n}\n\nasync function fetchProviderResponse(\n url: string,\n fetchOptions: RequestInit & { dispatcher?: unknown },\n options: {\n maxBytes?: number;\n secretValues: string[];\n },\n): Promise<ProviderApiHttpResponse> {\n const startedAt = Date.now();\n const res = await fetch(url, fetchOptions);\n const elapsedMs = Date.now() - startedAt;\n const rawText = await readResponseTextWithLimit(\n res,\n clampMaxBytes(options.maxBytes),\n );\n const redactedText = redactString(rawText.text, options.secretValues);\n const parsed = tryParseJson(redactedText);\n return {\n status: res.status,\n statusText: res.statusText,\n ok: res.ok,\n elapsedMs,\n headers: redactSecrets(headersToObject(res.headers), options.secretValues),\n contentType: res.headers.get(\"content-type\") ?? null,\n size: rawText.size,\n truncated: rawText.truncated,\n text: parsed === undefined ? redactedText : undefined,\n json: parsed,\n };\n}\n\nfunction isDispatcherCompatibilityError(error: unknown): boolean {\n const err = error as {\n message?: unknown;\n cause?: { code?: unknown; message?: unknown };\n };\n const code = typeof err?.cause?.code === \"string\" ? err.cause.code : \"\";\n const detail = [\n typeof err?.message === \"string\" ? err.message : \"\",\n typeof err?.cause?.message === \"string\" ? err.cause.message : \"\",\n ]\n .join(\" \")\n .toLowerCase();\n return (\n code === \"UND_ERR_INVALID_ARG\" &&\n detail.includes(\"invalid onrequeststart method\")\n );\n}\n\nfunction normalizeFetchError(\n error: unknown,\n options: {\n method: ProviderApiMethod;\n url: string;\n timeoutMs: number;\n secretValues: string[];\n },\n): Error {\n const target = describeProviderRequestTarget(\n options.url,\n options.secretValues,\n );\n const err = error as {\n name?: unknown;\n message?: unknown;\n cause?: { code?: unknown; message?: unknown };\n };\n if (err?.name === \"AbortError\") {\n return new Error(\n `Provider API request timed out after ${options.timeoutMs}ms: ${options.method} ${target}`,\n { cause: error },\n );\n }\n\n const causeCode =\n typeof err?.cause?.code === \"string\" && err.cause.code\n ? ` (${err.cause.code})`\n : \"\";\n const detail =\n typeof err?.cause?.message === \"string\" && err.cause.message\n ? err.cause.message\n : typeof err?.message === \"string\" && err.message\n ? err.message\n : String(error);\n return new Error(\n `Provider API request failed${causeCode}: ${options.method} ${target}: ${redactString(detail, options.secretValues)}`,\n { cause: error },\n );\n}\n\nfunction describeProviderRequestTarget(\n rawUrl: string,\n secretValues: string[],\n): string {\n try {\n const url = new URL(rawUrl);\n return redactString(\n `${url.host}${url.pathname}${url.search}`,\n secretValues,\n );\n } catch {\n return redactString(rawUrl, secretValues);\n }\n}\n\nasync function readResponseTextWithLimit(\n response: Response,\n maxBytes: number,\n): Promise<{ text: string; truncated: boolean; size: number }> {\n const contentLength = response.headers.get(\"content-length\");\n if (contentLength && Number(contentLength) > maxBytes) {\n return {\n text: `(response too large - ${contentLength} bytes, max ${maxBytes})`,\n truncated: true,\n size: Number(contentLength),\n };\n }\n const buffer = await response.arrayBuffer();\n const size = buffer.byteLength;\n const bytes = new Uint8Array(buffer.slice(0, maxBytes));\n return {\n text: new TextDecoder().decode(bytes),\n truncated: size > maxBytes,\n size,\n };\n}\n\nfunction headersToObject(headers: Headers): Record<string, string> {\n const result: Record<string, string> = {};\n headers.forEach((value, key) => {\n if (key.toLowerCase() !== \"set-cookie\") result[key] = value;\n });\n return result;\n}\n\nfunction tryParseJson(text: string): unknown | undefined {\n const trimmed = text.trim();\n if (!trimmed || !/^[{[]/.test(trimmed)) return undefined;\n try {\n return JSON.parse(trimmed);\n } catch {\n return undefined;\n }\n}\n\nfunction redactSecrets<T>(value: T, secretValues: string[]): T {\n if (secretValues.length === 0) return value;\n if (typeof value === \"string\") return redactString(value, secretValues) as T;\n if (Array.isArray(value)) {\n return value.map((item) => redactSecrets(item, secretValues)) as T;\n }\n if (value && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [\n key,\n redactSecrets(entry, secretValues),\n ]),\n ) as T;\n }\n return value;\n}\n\nfunction redactString(text: string, secretValues: string[]): string {\n let output = text;\n for (const secret of [...secretValues].sort((a, b) => b.length - a.length)) {\n if (!secret) continue;\n output = output.split(secret).join(\"[redacted]\");\n try {\n output = output.split(encodeURIComponent(secret)).join(\"[redacted]\");\n } catch {}\n }\n return output;\n}\n\nfunction mergeQueryObjects(\n base: unknown,\n extra: Record<string, string>,\n): unknown {\n if (!base) return extra;\n if (typeof base === \"string\") {\n const params = new URLSearchParams(base.replace(/^\\?/, \"\"));\n for (const [key, value] of Object.entries(extra)) {\n params.set(key, value);\n }\n return params.toString();\n }\n if (typeof base === \"object\" && !Array.isArray(base)) {\n return { ...(base as Record<string, unknown>), ...extra };\n }\n return extra;\n}\n\nfunction setValueAtPath(base: unknown, path: string, value: unknown): unknown {\n const root =\n base && typeof base === \"object\" && !Array.isArray(base)\n ? { ...(base as Record<string, unknown>) }\n : {};\n const parts = path.split(\".\").filter(Boolean);\n if (!parts.length) return root;\n\n let current: Record<string, unknown> = root;\n for (const part of parts.slice(0, -1)) {\n const existing = current[part];\n const next =\n existing && typeof existing === \"object\" && !Array.isArray(existing)\n ? { ...(existing as Record<string, unknown>) }\n : {};\n current[part] = next;\n current = next;\n }\n current[parts[parts.length - 1]!] = value;\n return root;\n}\n\nfunction clampTimeout(timeoutMs: number | undefined): number {\n if (!Number.isFinite(timeoutMs)) return DEFAULT_TIMEOUT_MS;\n return Math.max(1_000, Math.min(MAX_TIMEOUT_MS, Math.floor(timeoutMs!)));\n}\n\nfunction clampMaxBytes(maxBytes: number | undefined): number {\n if (!Number.isFinite(maxBytes)) return DEFAULT_MAX_BYTES;\n return Math.max(1_000, Math.min(MAX_MAX_BYTES, Math.floor(maxBytes!)));\n}\n\n/** Resolve a dot-path from a parsed JSON object, e.g. \"meta.next_cursor\". */\nfunction dotGet(obj: unknown, path: string): unknown {\n if (!path) return obj;\n let current: unknown = obj;\n for (const key of path.split(\".\")) {\n if (current === null || typeof current !== \"object\") return undefined;\n current = (current as Record<string, unknown>)[key];\n }\n return current;\n}\n\n/**\n * Handle saveToFile: write the full provider-api response body to a workspace\n * file and return a compact summary.\n */\nasync function handleSaveToFile(\n filePath: string,\n responseText: string,\n contentType: string | null,\n status: number,\n): Promise<unknown> {\n const { writeWorkspaceFile, SAVE_TO_FILE_MAX_BYTES: maxSaveBytes } =\n await import(\"../workspace-files/store.js\");\n const { getRequestOrgId, getRequestUserEmail } =\n await import(\"../server/request-context.js\");\n\n const orgId = getRequestOrgId();\n const email = getRequestUserEmail();\n const scope = orgId\n ? { scope: \"org\" as const, scopeId: orgId }\n : email\n ? { scope: \"user\" as const, scopeId: email }\n : null;\n\n if (!scope) {\n throw new Error(\n \"saveToFile requires an authenticated request context (no user email or orgId found).\",\n );\n }\n\n const mimeType = contentType?.split(\";\")[0].trim() ?? \"text/plain\";\n await writeWorkspaceFile(scope, filePath, responseText, mimeType, {\n maxFileBytes: maxSaveBytes,\n });\n const bytes = Buffer.byteLength(responseText, \"utf8\");\n const preview = responseText.slice(0, 2000);\n return {\n savedToFile: true,\n savedTo: filePath,\n status,\n bytes,\n contentType: mimeType,\n preview: preview.length < responseText.length ? `${preview}…` : preview,\n };\n}\n\n/**\n * Execute paginated requests, accumulating items across pages.\n * Returns the accumulated items array and the last response for metadata.\n */\nasync function fetchAllPages(\n config: FetchAllPagesConfig,\n executeOnePage: (extra?: {\n query?: Record<string, string>;\n bodyCursor?: { path: string; value: string };\n }) => Promise<{\n text: string;\n contentType: string | null;\n status: number;\n ok: boolean;\n }>,\n): Promise<{\n items: unknown[];\n pageCount: number;\n lastStatus: number;\n lastContentType: string | null;\n}> {\n const maxPages = Math.min(\n Number.isFinite(config.maxPages) && config.maxPages! > 0\n ? config.maxPages!\n : 10,\n FETCH_ALL_PAGES_MAX,\n );\n\n const items: unknown[] = [];\n let cursor: string | undefined;\n let pageCount = 0;\n let lastStatus = 0;\n let lastContentType: string | null = null;\n\n if (!config.cursorParam && !config.cursorBodyPath) {\n throw new Error(\n \"fetchAllPages requires cursorParam or cursorBodyPath to send the next cursor.\",\n );\n }\n if (config.cursorParam && config.cursorBodyPath) {\n throw new Error(\n \"fetchAllPages accepts exactly one cursor method: cursorParam or cursorBodyPath.\",\n );\n }\n\n while (pageCount < maxPages) {\n const extra: {\n query?: Record<string, string>;\n bodyCursor?: { path: string; value: string };\n } = {};\n if (cursor) {\n if (config.cursorParam) extra.query = { [config.cursorParam]: cursor };\n if (config.cursorBodyPath) {\n extra.bodyCursor = { path: config.cursorBodyPath, value: cursor };\n }\n }\n\n const page = await executeOnePage(pageCount > 0 ? extra : undefined);\n lastStatus = page.status;\n lastContentType = page.contentType;\n pageCount++;\n\n if (!page.ok) {\n const preview = page.text.replace(/\\s+/g, \" \").trim().slice(0, 500);\n throw new Error(\n `fetchAllPages request failed with HTTP ${page.status}${\n preview ? `: ${preview}` : \"\"\n }`,\n );\n }\n\n let body: unknown;\n try {\n body = JSON.parse(page.text);\n } catch {\n body = page.text;\n }\n\n // Extract items\n if (config.itemsPath) {\n const extracted = dotGet(body, config.itemsPath);\n if (Array.isArray(extracted)) {\n items.push(...extracted);\n } else if (extracted !== undefined) {\n items.push(extracted);\n }\n } else {\n items.push(body);\n }\n\n // Extract next cursor\n const nextCursor = dotGet(body, config.cursorPath);\n if (\n !nextCursor ||\n nextCursor === \"\" ||\n nextCursor === null ||\n nextCursor === cursor\n ) {\n break;\n }\n cursor = String(nextCursor);\n }\n\n return { items, pageCount, lastStatus, lastContentType };\n}\n\nfunction fingerprint(value: string): string {\n return createHash(\"sha256\").update(value).digest(\"hex\").slice(0, 12);\n}\n\nfunction base64UrlEncode(bytes: Uint8Array): string {\n let binary = \"\";\n for (let i = 0; i < bytes.length; i += 1) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary)\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/, \"\");\n}\n\nfunction base64UrlEncodeString(value: string): string {\n return base64UrlEncode(new TextEncoder().encode(value));\n}\n\nfunction pemToPkcs8(pem: string): Uint8Array {\n const body = pem\n .replace(/-----BEGIN [^-]+-----/g, \"\")\n .replace(/-----END [^-]+-----/g, \"\")\n .replace(/\\s+/g, \"\");\n const binary = atob(body);\n const out = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i += 1) {\n out[i] = binary.charCodeAt(i);\n }\n return out;\n}\n\nconst keyCache = new Map<string, Promise<CryptoKey>>();\n\nasync function privateKeyCacheKey(privateKeyPem: string): Promise<string> {\n const digest = await crypto.subtle.digest(\n \"SHA-256\",\n new TextEncoder().encode(privateKeyPem) as BufferSource,\n );\n return `sha256:${base64UrlEncode(new Uint8Array(digest))}`;\n}\n\nasync function importRs256Key(privateKeyPem: string): Promise<CryptoKey> {\n const cacheKey = await privateKeyCacheKey(privateKeyPem);\n let cached = keyCache.get(cacheKey);\n if (!cached) {\n cached = crypto.subtle.importKey(\n \"pkcs8\",\n pemToPkcs8(privateKeyPem) as BufferSource,\n { name: \"RSASSA-PKCS1-v1_5\", hash: \"SHA-256\" },\n false,\n [\"sign\"],\n );\n keyCache.set(cacheKey, cached);\n }\n return cached;\n}\n\nasync function signRs256Jwt(\n payload: Record<string, unknown>,\n privateKeyPem: string,\n): Promise<string> {\n const header = { alg: \"RS256\", typ: \"JWT\" };\n const signingInput = `${base64UrlEncodeString(\n JSON.stringify(header),\n )}.${base64UrlEncodeString(JSON.stringify(payload))}`;\n\n const key = await importRs256Key(privateKeyPem);\n const signature = await crypto.subtle.sign(\n \"RSASSA-PKCS1-v1_5\",\n key,\n new TextEncoder().encode(signingInput) as BufferSource,\n );\n\n return `${signingInput}.${base64UrlEncode(new Uint8Array(signature))}`;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/provider-api/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport {\n resolveCredential,\n type CredentialContext,\n} from \"../credentials/index.js\";\nimport {\n createSsrfSafeDispatcher,\n isBlockedExtensionUrlWithDns,\n} from \"../extensions/url-safety.js\";\nimport {\n processWebContent,\n type WebContentSearchOptions,\n type WebExtractMode,\n type WebResponseMode,\n} from \"../extensions/web-content.js\";\nimport {\n deleteOAuthTokens,\n listOAuthAccountsByOwner,\n saveOAuthTokens,\n} from \"../oauth-tokens/index.js\";\nimport { getCredentialContext } from \"../server/request-context.js\";\nimport { resolveWorkspaceConnectionCredentialForApp } from \"../workspace-connections/credentials.js\";\nimport type { WorkspaceConnectionTemplateUse } from \"../connections/catalog.js\";\nimport type {\n CustomProviderConfig,\n CustomProviderAuthKind,\n} from \"./custom-registry.js\";\nimport {\n createProviderQuotaIdentity,\n createProviderRequestDedupeKey,\n executeWithProviderQuota,\n type ProviderQuotaIdentity,\n type ProviderQuotaExhaustedDetail,\n} from \"./quota-governor.js\";\n\nexport type {\n CustomProviderConfig,\n CustomProviderScope,\n CustomProviderAuthKind,\n UpsertCustomProviderArgs,\n} from \"./custom-registry.js\";\nexport {\n upsertCustomProvider,\n deleteCustomProvider,\n listCustomProviders,\n getCustomProvider,\n validateCustomBaseUrl,\n} from \"./custom-registry.js\";\n\nexport const PROVIDER_API_IDS = [\n \"amplitude\",\n \"apollo\",\n \"bigquery\",\n \"commonroom\",\n \"dataforseo\",\n \"ga4\",\n \"gcloud\",\n \"github\",\n \"gmail\",\n \"gong\",\n \"google_calendar\",\n \"google_drive\",\n \"granola\",\n \"grafana\",\n \"hubspot\",\n \"jira\",\n \"mixpanel\",\n \"notion\",\n \"posthog\",\n \"prometheus\",\n \"pylon\",\n \"sentry\",\n \"slack\",\n \"stripe\",\n \"twitter\",\n] as const;\n\nexport type ProviderApiId = (typeof PROVIDER_API_IDS)[number];\n\nexport type ProviderApiMethod =\n | \"GET\"\n | \"POST\"\n | \"PUT\"\n | \"PATCH\"\n | \"DELETE\"\n | \"HEAD\";\n\n/** Cursor-pagination config for fetchAllPages. */\nexport interface FetchAllPagesConfig {\n /**\n * Dot-path into the JSON response body where the next-page cursor lives,\n * e.g. \"meta.next_cursor\" or \"pagination.next_page_token\".\n */\n cursorPath: string;\n /**\n * Query parameter name to pass the cursor on the next request,\n * e.g. \"cursor\" or \"page_token\".\n */\n cursorParam?: string;\n /**\n * Dot-path in the JSON request body to set to the cursor on the next request.\n * Use this for POST-body pagination, e.g. Gong's top-level `cursor`.\n */\n cursorBodyPath?: string;\n /**\n * Dot-path to the items array in each response body.\n * When omitted, the whole response body is appended to the items array.\n */\n itemsPath?: string;\n /**\n * Maximum number of pages to fetch. Default 10, max 50.\n */\n maxPages?: number;\n}\n\nexport interface ProviderApiRequestArgs {\n provider: ProviderApiId | string;\n method?: ProviderApiMethod;\n path: string;\n query?: unknown;\n headers?: Record<string, unknown>;\n body?: unknown;\n auth?: \"default\" | \"none\";\n timeoutMs?: number;\n maxBytes?: number;\n connectionId?: string | null;\n accountId?: string | null;\n /**\n * When set, write the full response body to this workspace file path instead\n * of returning it in context. Returns a compact summary with status, bytes,\n * path, and a preview. Allows up to 20 MB (vs the normal 4 MB context limit).\n */\n saveToFile?: string;\n /**\n * When set, automatically paginate by cursor until the cursor field is empty\n * or maxPages is reached. Accumulates items from itemsPath (or whole bodies)\n * across all pages. Combine with saveToFile to write the full dataset.\n */\n fetchAllPages?: FetchAllPagesConfig;\n}\n\nexport interface GitHubRepositoryRef {\n owner: string;\n repo: string;\n}\n\nexport interface GitHubRepositoryFileEntry {\n name: string;\n path: string;\n type: \"file\" | \"dir\" | \"symlink\" | \"submodule\" | \"unknown\";\n sha: string | null;\n size: number | null;\n url: string | null;\n htmlUrl: string | null;\n downloadUrl: string | null;\n}\n\nexport interface GitHubRepositoryFileListArgs extends GitHubRepositoryRef {\n path?: string;\n ref?: string;\n recursive?: boolean;\n includeDirectories?: boolean;\n maxFiles?: number;\n connectionId?: string | null;\n timeoutMs?: number;\n maxBytes?: number;\n}\n\nexport interface GitHubRepositoryFileSearchArgs extends GitHubRepositoryRef {\n query?: string;\n path?: string;\n filename?: string;\n extension?: string;\n language?: string;\n ref?: string;\n perPage?: number;\n page?: number;\n maxFiles?: number;\n includeTextMatches?: boolean;\n connectionId?: string | null;\n timeoutMs?: number;\n maxBytes?: number;\n}\n\nexport interface GitHubRepositoryFileReadArgs extends GitHubRepositoryRef {\n path: string;\n ref?: string;\n connectionId?: string | null;\n timeoutMs?: number;\n maxBytes?: number;\n}\n\nexport interface GitHubRepositoryFileWriteArgs extends GitHubRepositoryRef {\n path: string;\n content: string;\n message: string;\n branch?: string;\n sha?: string;\n overwriteExisting?: boolean;\n committer?: GitHubRepositoryCommitIdentity;\n author?: GitHubRepositoryCommitIdentity;\n connectionId?: string | null;\n timeoutMs?: number;\n maxBytes?: number;\n}\n\nexport interface GitHubRepositoryFileDeleteArgs extends GitHubRepositoryRef {\n path: string;\n message: string;\n branch?: string;\n sha?: string;\n committer?: GitHubRepositoryCommitIdentity;\n author?: GitHubRepositoryCommitIdentity;\n connectionId?: string | null;\n timeoutMs?: number;\n maxBytes?: number;\n}\n\nexport interface GitHubRepositoryCommitIdentity {\n name: string;\n email: string;\n date?: string;\n}\n\nexport interface GitHubRepositoryFileListResult {\n repository: GitHubRepositoryRef;\n ref: string | null;\n path: string;\n recursive: boolean;\n entries: GitHubRepositoryFileEntry[];\n totalCount: number;\n truncated: boolean;\n providerTruncated: boolean;\n response: Pick<ProviderApiHttpResponse, \"status\" | \"statusText\" | \"ok\">;\n}\n\nexport interface GitHubRepositoryFileSearchResult {\n repository: GitHubRepositoryRef;\n mode: \"code-search\" | \"tree-filter\";\n query: string | null;\n ref: string | null;\n items: GitHubRepositoryFileEntry[];\n totalCount: number;\n truncated: boolean;\n incompleteResults: boolean;\n response: Pick<ProviderApiHttpResponse, \"status\" | \"statusText\" | \"ok\">;\n}\n\nexport interface GitHubRepositoryFileReadResult {\n repository: GitHubRepositoryRef;\n path: string;\n ref: string | null;\n name: string;\n type: string;\n sha: string;\n size: number;\n encoding: string | null;\n content: string | null;\n contentBase64: string | null;\n url: string | null;\n htmlUrl: string | null;\n downloadUrl: string | null;\n response: Pick<ProviderApiHttpResponse, \"status\" | \"statusText\" | \"ok\">;\n}\n\nexport interface GitHubRepositoryFileWriteResult {\n repository: GitHubRepositoryRef;\n path: string;\n branch: string | null;\n content: {\n name: string | null;\n path: string | null;\n sha: string | null;\n url: string | null;\n htmlUrl: string | null;\n };\n commit: {\n sha: string | null;\n url: string | null;\n htmlUrl: string | null;\n message: string | null;\n };\n response: Pick<ProviderApiHttpResponse, \"status\" | \"statusText\" | \"ok\">;\n}\n\nexport interface GitHubRepositoryFileDeleteResult {\n repository: GitHubRepositoryRef;\n path: string;\n branch: string | null;\n commit: {\n sha: string | null;\n url: string | null;\n htmlUrl: string | null;\n message: string | null;\n };\n response: Pick<ProviderApiHttpResponse, \"status\" | \"statusText\" | \"ok\">;\n}\n\nexport interface ProviderApiDocsOptions {\n provider: ProviderApiId | string;\n url?: string;\n maxBytes?: number;\n maxChars?: number;\n responseMode?: WebResponseMode;\n extract?: WebExtractMode;\n includeLinks?: boolean;\n search?: WebContentSearchOptions;\n}\n\nexport type ProviderApiAuthKind =\n | { type: \"none\" }\n | {\n type: \"bearer\";\n keys: readonly string[];\n workspaceProvider?: string;\n }\n | {\n type: \"basic\";\n usernameKey: string;\n passwordKey: string;\n workspaceProvider?: string;\n }\n | {\n type: \"basic-raw\";\n key: string;\n workspaceProvider?: string;\n }\n | {\n type: \"api-key-header\";\n key: string;\n header: string;\n workspaceProvider?: string;\n }\n | {\n type: \"google-service-account\";\n scopes: readonly string[];\n }\n | {\n type: \"oauth-bearer\";\n oauthProvider: string;\n tokenLabel: string;\n }\n | {\n type: \"prometheus\";\n };\n\nexport interface ProviderApiConfig {\n id: ProviderApiId;\n label: string;\n defaultBaseUrl: string;\n baseUrlCredentialKey?: string;\n auth: ProviderApiAuthKind;\n credentialKeys: readonly string[];\n docsUrls: readonly string[];\n specUrls?: readonly string[];\n allowedHostSuffixes?: readonly string[];\n defaultHeaders?: Record<string, string>;\n placeholders?: readonly ProviderApiPlaceholder[];\n examples?: readonly ProviderApiExample[];\n notes?: readonly string[];\n corpusRecipes?: readonly ProviderApiCorpusRecipe[];\n templateUses?: readonly WorkspaceConnectionTemplateUse[];\n}\n\nexport interface ProviderApiPlaceholder {\n name: string;\n credentialKey: string;\n label: string;\n}\n\nexport interface ProviderApiExample {\n label: string;\n method: ProviderApiMethod;\n path: string;\n body?: unknown;\n}\n\nexport interface ProviderApiCorpusRecipe {\n label: string;\n useWhen: string;\n workflow: readonly string[];\n request: {\n method: ProviderApiMethod;\n path: string;\n body?: unknown;\n query?: unknown;\n };\n pagination?: {\n itemsPath?: string;\n nextCursorPath?: string;\n cursorParam?: string;\n cursorBodyPath?: string;\n pageParam?: string;\n offsetParam?: string;\n pageSize?: number;\n maxPages?: number;\n };\n batch?: {\n inputValuePath?: string;\n itemBodyPath?: string;\n itemQueryParam?: string;\n responseItemsPath?: string;\n batchSize?: number;\n };\n search?: {\n textPaths?: readonly string[];\n idPaths?: readonly string[];\n metadataPaths?: readonly string[];\n };\n}\n\nexport interface ProviderApiResolvedCredential {\n key: string;\n value: string;\n source: string;\n provider: string;\n connectionId?: string;\n connectionLabel?: string;\n accountId?: string;\n accountLabel?: string | null;\n scope?: string;\n}\n\nexport interface ProviderApiCredentialLookupOptions {\n appId: string;\n provider: string;\n key: string;\n ctx: CredentialContext;\n workspaceProvider?: string;\n connectionId?: string | null;\n localCredentialSource: string;\n}\n\nexport type ProviderApiCredentialResolver = (\n options: ProviderApiCredentialLookupOptions,\n) => Promise<ProviderApiResolvedCredential | null>;\n\nexport interface ProviderApiRuntimeOptions {\n appId: string;\n providerIds?: readonly (ProviderApiId | string)[];\n localCredentialSource?: string;\n getCredentialContext?: () => CredentialContext | null;\n resolveCredential?: ProviderApiCredentialResolver;\n /**\n * Template-specific OAuth token provider overrides for built-in provider API\n * configs. Use when an app stores a provider's OAuth grant under a narrower\n * local provider id, e.g. Google Drive scoped to a \"google-docs\" connection.\n */\n oauthProviderOverrides?: Record<string, string>;\n /**\n * Optional loader for custom providers registered at runtime. When provided,\n * custom providers are merged with the static built-in registry for catalog,\n * docs, and request operations. Custom providers cannot shadow built-in ids.\n */\n getCustomProviders?: () => Promise<CustomProviderConfig[]>;\n}\n\nexport interface ProviderApiRuntime {\n providerIds: readonly ProviderApiId[];\n listCatalog(\n provider?: ProviderApiId | string,\n ): ReturnType<typeof listProviderApiCatalog> | Promise<unknown[]>;\n fetchDocs(options: ProviderApiDocsOptions): Promise<unknown>;\n executeRequest(args: ProviderApiRequestArgs): Promise<unknown>;\n listGitHubRepositoryFiles(\n args: GitHubRepositoryFileListArgs,\n ): Promise<GitHubRepositoryFileListResult>;\n searchGitHubRepositoryFiles(\n args: GitHubRepositoryFileSearchArgs,\n ): Promise<GitHubRepositoryFileSearchResult>;\n readGitHubRepositoryFile(\n args: GitHubRepositoryFileReadArgs,\n ): Promise<GitHubRepositoryFileReadResult>;\n writeGitHubRepositoryFile(\n args: GitHubRepositoryFileWriteArgs,\n ): Promise<GitHubRepositoryFileWriteResult>;\n deleteGitHubRepositoryFile(\n args: GitHubRepositoryFileDeleteArgs,\n ): Promise<GitHubRepositoryFileDeleteResult>;\n}\n\ninterface ResolvedAuth {\n headers: Record<string, string>;\n credentialSources: Array<Omit<ProviderApiResolvedCredential, \"value\">>;\n secretValues: string[];\n}\n\ninterface ProviderApiHttpResponse {\n status: number;\n statusText: string;\n ok: boolean;\n elapsedMs: number;\n headers: Record<string, string>;\n contentType: string | null;\n size: number;\n truncated: boolean;\n text?: string;\n json?: unknown;\n quota?: {\n exhausted: boolean;\n providerId: string;\n retryAfterMs: number;\n retryAt: string;\n reason: string;\n };\n}\n\ninterface ProviderApiFetchQuotaOptions {\n identity: ProviderQuotaIdentity;\n method: ProviderApiMethod;\n target: string;\n requestKey?: string;\n}\n\ninterface OAuthTokens {\n access_token?: string;\n accessToken?: string;\n refresh_token?: string;\n refreshToken?: string;\n expiry_date?: number;\n expiresAt?: number;\n expires_in?: number;\n token_type?: string;\n scope?: string;\n}\n\nconst PERMANENT_GOOGLE_OAUTH_REFRESH_ERRORS = new Set([\n \"invalid_grant\",\n \"unauthorized_client\",\n \"invalid_client\",\n]);\n\nconst DEFAULT_TIMEOUT_MS = 30_000;\nconst MAX_TIMEOUT_MS = 120_000;\nconst DEFAULT_MAX_BYTES = 1024 * 1024;\nconst MAX_MAX_BYTES = 4 * 1024 * 1024;\n/** When saveToFile is used, allow a much larger per-page response since the\n * content won't enter the model's context window. */\nconst SAVE_TO_FILE_MAX_BYTES = 20 * 1024 * 1024; // 20 MB\nconst FETCH_ALL_PAGES_MAX = 50;\nconst HEADER_NAME_RE = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;\nconst BLOCKED_OUTBOUND_HEADERS = new Set([\n \"connection\",\n \"content-length\",\n \"cookie\",\n \"forwarded\",\n \"host\",\n \"keep-alive\",\n \"origin\",\n \"proxy-authenticate\",\n \"proxy-authorization\",\n \"referer\",\n \"set-cookie\",\n \"te\",\n \"trailer\",\n \"transfer-encoding\",\n \"upgrade\",\n \"x-forwarded-for\",\n \"x-forwarded-host\",\n \"x-forwarded-proto\",\n]);\n\nconst PROVIDER_CONFIGS: Record<ProviderApiId, ProviderApiConfig> = {\n amplitude: {\n id: \"amplitude\",\n label: \"Amplitude\",\n defaultBaseUrl: \"https://amplitude.com/api/2\",\n auth: {\n type: \"basic\",\n usernameKey: \"AMPLITUDE_API_KEY\",\n passwordKey: \"AMPLITUDE_SECRET_KEY\",\n },\n credentialKeys: [\"AMPLITUDE_API_KEY\", \"AMPLITUDE_SECRET_KEY\"],\n docsUrls: [\"https://amplitude.com/docs/apis\"],\n allowedHostSuffixes: [\"amplitude.com\"],\n templateUses: [\"analytics\"],\n examples: [\n {\n label: \"Export events\",\n method: \"GET\",\n path: \"/export?start=20260601T00&end=20260602T00\",\n },\n ],\n },\n apollo: {\n id: \"apollo\",\n label: \"Apollo\",\n defaultBaseUrl: \"https://api.apollo.io\",\n auth: {\n type: \"api-key-header\",\n key: \"APOLLO_API_KEY\",\n header: \"x-api-key\",\n },\n credentialKeys: [\"APOLLO_API_KEY\"],\n docsUrls: [\"https://docs.apollo.io/reference/api-reference\"],\n templateUses: [\"analytics\", \"calendar\"],\n examples: [\n {\n label: \"Search people\",\n method: \"POST\",\n path: \"/api/v1/mixed_people/search\",\n body: { q_keywords: \"vp marketing\", page: 1, per_page: 10 },\n },\n ],\n },\n bigquery: {\n id: \"bigquery\",\n label: \"BigQuery REST API\",\n defaultBaseUrl: \"https://bigquery.googleapis.com/bigquery/v2\",\n auth: {\n type: \"google-service-account\",\n scopes: [\n \"https://www.googleapis.com/auth/cloud-platform\",\n \"https://www.googleapis.com/auth/bigquery\",\n ],\n },\n credentialKeys: [\n \"GOOGLE_APPLICATION_CREDENTIALS_JSON\",\n \"BIGQUERY_PROJECT_ID\",\n ],\n docsUrls: [\"https://cloud.google.com/bigquery/docs/reference/rest\"],\n specUrls: [\"https://bigquery.googleapis.com/$discovery/rest?version=v2\"],\n allowedHostSuffixes: [\"googleapis.com\"],\n templateUses: [\"analytics\"],\n placeholders: [\n {\n name: \"projectId\",\n credentialKey: \"BIGQUERY_PROJECT_ID\",\n label: \"Configured BigQuery project ID\",\n },\n ],\n examples: [\n {\n label: \"List datasets\",\n method: \"GET\",\n path: \"/projects/{projectId}/datasets\",\n },\n {\n label: \"Run query\",\n method: \"POST\",\n path: \"/projects/{projectId}/queries\",\n body: { query: \"SELECT 1\", useLegacySql: false },\n },\n ],\n },\n commonroom: {\n id: \"commonroom\",\n label: \"Common Room\",\n defaultBaseUrl: \"https://api.commonroom.io/community/v1\",\n auth: {\n type: \"bearer\",\n keys: [\"COMMONROOM_API_TOKEN\"],\n },\n credentialKeys: [\"COMMONROOM_API_TOKEN\"],\n docsUrls: [\"https://developer.commonroom.io/reference/overview\"],\n templateUses: [\"analytics\"],\n examples: [{ label: \"List members\", method: \"GET\", path: \"/members\" }],\n },\n dataforseo: {\n id: \"dataforseo\",\n label: \"DataForSEO\",\n defaultBaseUrl: \"https://api.dataforseo.com/v3\",\n auth: {\n type: \"basic\",\n usernameKey: \"DATAFORSEO_LOGIN\",\n passwordKey: \"DATAFORSEO_PASSWORD\",\n },\n credentialKeys: [\"DATAFORSEO_LOGIN\", \"DATAFORSEO_PASSWORD\"],\n docsUrls: [\"https://docs.dataforseo.com/v3/\"],\n templateUses: [\"analytics\"],\n examples: [\n {\n label: \"SERP task post\",\n method: \"POST\",\n path: \"/serp/google/organic/task_post\",\n body: [\n { keyword: \"builder.io\", location_code: 2840, language_code: \"en\" },\n ],\n },\n ],\n },\n ga4: {\n id: \"ga4\",\n label: \"Google Analytics Data API\",\n defaultBaseUrl: \"https://analyticsdata.googleapis.com/v1beta\",\n auth: {\n type: \"google-service-account\",\n scopes: [\"https://www.googleapis.com/auth/analytics.readonly\"],\n },\n credentialKeys: [\"GOOGLE_APPLICATION_CREDENTIALS_JSON\", \"GA4_PROPERTY_ID\"],\n docsUrls: [\n \"https://developers.google.com/analytics/devguides/reporting/data/v1/rest\",\n ],\n specUrls: [\n \"https://analyticsdata.googleapis.com/$discovery/rest?version=v1beta\",\n ],\n allowedHostSuffixes: [\"googleapis.com\"],\n templateUses: [\"analytics\"],\n placeholders: [\n {\n name: \"propertyId\",\n credentialKey: \"GA4_PROPERTY_ID\",\n label: \"Configured GA4 property ID\",\n },\n ],\n examples: [\n {\n label: \"Run report\",\n method: \"POST\",\n path: \"/properties/{propertyId}:runReport\",\n body: {\n dateRanges: [{ startDate: \"30daysAgo\", endDate: \"today\" }],\n metrics: [{ name: \"activeUsers\" }],\n },\n },\n ],\n },\n gcloud: {\n id: \"gcloud\",\n label: \"Google Cloud APIs\",\n defaultBaseUrl: \"https://cloudresourcemanager.googleapis.com\",\n auth: {\n type: \"google-service-account\",\n scopes: [\n \"https://www.googleapis.com/auth/cloud-platform\",\n \"https://www.googleapis.com/auth/monitoring.read\",\n \"https://www.googleapis.com/auth/logging.read\",\n \"https://www.googleapis.com/auth/bigquery\",\n ],\n },\n credentialKeys: [\n \"GOOGLE_APPLICATION_CREDENTIALS_JSON\",\n \"BIGQUERY_PROJECT_ID\",\n ],\n docsUrls: [\"https://cloud.google.com/apis/docs/overview\"],\n specUrls: [\"https://www.googleapis.com/discovery/v1/apis\"],\n allowedHostSuffixes: [\"googleapis.com\"],\n templateUses: [\"analytics\"],\n placeholders: [\n {\n name: \"projectId\",\n credentialKey: \"BIGQUERY_PROJECT_ID\",\n label: \"Configured Google Cloud project ID\",\n },\n ],\n examples: [\n {\n label: \"Get project\",\n method: \"GET\",\n path: \"https://cloudresourcemanager.googleapis.com/v1/projects/{projectId}\",\n },\n ],\n },\n github: {\n id: \"github\",\n label: \"GitHub REST API\",\n defaultBaseUrl: \"https://api.github.com\",\n auth: {\n type: \"bearer\",\n keys: [\"GITHUB_TOKEN\"],\n workspaceProvider: \"github\",\n },\n credentialKeys: [\"GITHUB_TOKEN\"],\n docsUrls: [\"https://docs.github.com/rest\"],\n specUrls: [\n \"https://raw.githubusercontent.com/github/rest-api-description/main/descriptions/api.github.com/api.github.com.json\",\n ],\n defaultHeaders: {\n Accept: \"application/vnd.github+json\",\n \"X-GitHub-Api-Version\": \"2022-11-28\",\n },\n templateUses: [\"analytics\", \"brain\", \"design\", \"dispatch\"],\n examples: [\n { label: \"Authenticated user\", method: \"GET\", path: \"/user\" },\n { label: \"Search issues\", method: \"GET\", path: \"/search/issues\" },\n ],\n },\n gmail: {\n id: \"gmail\",\n label: \"Gmail API\",\n defaultBaseUrl: \"https://gmail.googleapis.com/gmail/v1\",\n auth: {\n type: \"oauth-bearer\",\n oauthProvider: \"google\",\n tokenLabel: \"Google OAuth token\",\n },\n credentialKeys: [\"GOOGLE_OAUTH_ACCOUNT\"],\n docsUrls: [\"https://developers.google.com/gmail/api/reference/rest\"],\n specUrls: [\"https://gmail.googleapis.com/$discovery/rest?version=v1\"],\n allowedHostSuffixes: [\"googleapis.com\"],\n templateUses: [\"brain\", \"mail\", \"dispatch\"],\n examples: [\n {\n label: \"List messages\",\n method: \"GET\",\n path: \"/users/me/messages\",\n },\n {\n label: \"Search messages\",\n method: \"GET\",\n path: \"/users/me/messages\",\n body: undefined,\n },\n ],\n notes: [\n \"Uses the current user's stored Google OAuth account. Pass accountId when the user has multiple Google accounts connected.\",\n ],\n },\n gong: {\n id: \"gong\",\n label: \"Gong\",\n defaultBaseUrl: \"https://api.gong.io/v2\",\n baseUrlCredentialKey: \"GONG_API_BASE\",\n auth: {\n type: \"basic\",\n usernameKey: \"GONG_ACCESS_KEY\",\n passwordKey: \"GONG_ACCESS_SECRET\",\n },\n credentialKeys: [\"GONG_ACCESS_KEY\", \"GONG_ACCESS_SECRET\", \"GONG_API_BASE\"],\n docsUrls: [\"https://gong.app.gong.io/settings/api/documentation\"],\n templateUses: [\"analytics\", \"calendar\"],\n examples: [\n { label: \"List calls\", method: \"GET\", path: \"/calls\" },\n {\n label: \"Call transcript\",\n method: \"POST\",\n path: \"/calls/transcript\",\n body: { filter: { callIds: [\"<call-id>\"] } },\n },\n {\n label: \"Calls with parties/content\",\n method: \"POST\",\n path: \"/calls/extensive\",\n body: {\n filter: { fromDateTime: \"<iso-date-time>\" },\n contentSelector: {\n exposedFields: {\n parties: true,\n content: { brief: true, keyPoints: true },\n },\n },\n },\n },\n ],\n notes: [\n \"For broad corpus work, call /calls/extensive with provider-api-request and stageAs/saveToFile. Gong returns the next cursor at records.cursor and expects the next cursor in the POST body at cursor, so use pagination { nextCursorPath: 'records.cursor', cursorBodyPath: 'cursor' } for stageAs or fetchAllPages { cursorPath: 'records.cursor', cursorBodyPath: 'cursor' } for saveToFile.\",\n \"Batch transcripts with POST /calls/transcript and body { filter: { callIds: [...] } } after narrowing or staging call ids.\",\n ],\n corpusRecipes: [\n {\n label: \"Batch-search Gong call transcripts from staged call ids\",\n useWhen:\n \"Use when the user asks to search, count, or prove absence across Gong transcript text for a bounded cohort of call ids.\",\n workflow: [\n \"Stage or otherwise collect the exact call ids in scope first.\",\n \"Start provider-corpus-job with mode=batch-search against /calls/transcript.\",\n \"Inject each batch into body path filter.callIds and search responseItemsPath callTranscripts.\",\n \"Search transcript.sentence text fields, then report call-id coverage, batches processed, matches, and gaps.\",\n ],\n request: {\n method: \"POST\",\n path: \"/calls/transcript\",\n body: { filter: { callIds: [] } },\n },\n batch: {\n inputValuePath: \"id\",\n itemBodyPath: \"filter.callIds\",\n responseItemsPath: \"callTranscripts\",\n batchSize: 20,\n },\n search: {\n textPaths: [\"transcript.sentences.text\", \"transcript\"],\n idPaths: [\"callId\"],\n metadataPaths: [\"callId\"],\n },\n },\n {\n label: \"Stage Gong calls with parties/content\",\n useWhen:\n \"Use when the user needs a complete Gong call cohort before a transcript/message join or coverage-sensitive search.\",\n workflow: [\n \"Call provider-api-request with stageAs and pagination.\",\n \"Use /calls/extensive when party fields or content summaries are needed; use /calls for lightweight metadata.\",\n \"Do not treat staged call metadata as transcript text.\",\n ],\n request: {\n method: \"POST\",\n path: \"/calls/extensive\",\n body: {\n filter: { fromDateTime: \"<iso-date-time>\" },\n contentSelector: { exposedFields: { parties: true } },\n },\n },\n pagination: {\n itemsPath: \"calls\",\n nextCursorPath: \"records.cursor\",\n cursorBodyPath: \"cursor\",\n maxPages: 200,\n },\n },\n ],\n },\n google_calendar: {\n id: \"google_calendar\",\n label: \"Google Calendar API\",\n defaultBaseUrl: \"https://www.googleapis.com/calendar/v3\",\n auth: {\n type: \"oauth-bearer\",\n oauthProvider: \"google\",\n tokenLabel: \"Google OAuth token\",\n },\n credentialKeys: [\"GOOGLE_OAUTH_ACCOUNT\"],\n docsUrls: [\"https://developers.google.com/calendar/api/v3/reference\"],\n specUrls: [\"https://www.googleapis.com/discovery/v1/apis/calendar/v3/rest\"],\n allowedHostSuffixes: [\"googleapis.com\"],\n templateUses: [\"brain\", \"calendar\", \"dispatch\", \"mail\"],\n examples: [\n {\n label: \"List calendars\",\n method: \"GET\",\n path: \"/users/me/calendarList\",\n },\n {\n label: \"Search events\",\n method: \"GET\",\n path: \"/calendars/primary/events\",\n },\n ],\n notes: [\n \"Uses the current user's stored Google OAuth account. Pass accountId when the user has multiple Google accounts connected.\",\n ],\n },\n google_drive: {\n id: \"google_drive\",\n label: \"Google Drive API\",\n defaultBaseUrl: \"https://www.googleapis.com/drive/v3\",\n auth: {\n type: \"oauth-bearer\",\n oauthProvider: \"google\",\n tokenLabel: \"Google OAuth token\",\n },\n credentialKeys: [\"GOOGLE_OAUTH_ACCOUNT\"],\n docsUrls: [\"https://developers.google.com/drive/api/reference/rest/v3\"],\n specUrls: [\"https://www.googleapis.com/discovery/v1/apis/drive/v3/rest\"],\n allowedHostSuffixes: [\"googleapis.com\"],\n templateUses: [\"brain\", \"content\", \"slides\", \"dispatch\"],\n examples: [\n { label: \"List files\", method: \"GET\", path: \"/files\" },\n { label: \"Get file metadata\", method: \"GET\", path: \"/files/{fileId}\" },\n ],\n notes: [\n \"Uses the current user's stored Google OAuth account. Pass accountId when the user has multiple Google accounts connected.\",\n ],\n },\n granola: {\n id: \"granola\",\n label: \"Granola Public API\",\n defaultBaseUrl: \"https://public-api.granola.ai/v1\",\n auth: {\n type: \"bearer\",\n keys: [\"GRANOLA_API_KEY\"],\n workspaceProvider: \"granola\",\n },\n credentialKeys: [\"GRANOLA_API_KEY\"],\n docsUrls: [\"https://docs.granola.ai/\"],\n templateUses: [\"brain\", \"dispatch\"],\n examples: [\n { label: \"List notes\", method: \"GET\", path: \"/notes\" },\n { label: \"Get note\", method: \"GET\", path: \"/notes/<note-id>\" },\n ],\n },\n grafana: {\n id: \"grafana\",\n label: \"Grafana\",\n defaultBaseUrl: \"https://grafana.example.com\",\n baseUrlCredentialKey: \"GRAFANA_URL\",\n auth: {\n type: \"bearer\",\n keys: [\"GRAFANA_API_TOKEN\"],\n },\n credentialKeys: [\"GRAFANA_URL\", \"GRAFANA_API_TOKEN\"],\n docsUrls: [\"https://grafana.com/docs/grafana/latest/developers/http_api/\"],\n templateUses: [\"analytics\"],\n examples: [\n { label: \"List dashboards\", method: \"GET\", path: \"/api/search\" },\n ],\n },\n hubspot: {\n id: \"hubspot\",\n label: \"HubSpot\",\n defaultBaseUrl: \"https://api.hubapi.com\",\n auth: {\n type: \"bearer\",\n keys: [\"HUBSPOT_PRIVATE_APP_TOKEN\", \"HUBSPOT_ACCESS_TOKEN\"],\n workspaceProvider: \"hubspot\",\n },\n credentialKeys: [\"HUBSPOT_PRIVATE_APP_TOKEN\", \"HUBSPOT_ACCESS_TOKEN\"],\n docsUrls: [\"https://developers.hubspot.com/docs/api/overview\"],\n templateUses: [\"analytics\", \"brain\", \"calendar\", \"mail\", \"dispatch\"],\n examples: [\n {\n label: \"Search deals with any HubSpot CRM filter\",\n method: \"POST\",\n path: \"/crm/v3/objects/deals/search\",\n body: {\n filterGroups: [\n {\n filters: [\n {\n propertyName: \"products\",\n operator: \"CONTAINS_TOKEN\",\n value: \"Publish\",\n },\n ],\n },\n ],\n properties: [\"dealname\", \"products\", \"dealstage\", \"closedate\"],\n limit: 100,\n },\n },\n {\n label: \"List deal property metadata\",\n method: \"GET\",\n path: \"/crm/v3/properties/deals\",\n },\n ],\n },\n jira: {\n id: \"jira\",\n label: \"Jira Cloud\",\n defaultBaseUrl: \"https://example.atlassian.net\",\n baseUrlCredentialKey: \"JIRA_BASE_URL\",\n auth: {\n type: \"basic\",\n usernameKey: \"JIRA_USER_EMAIL\",\n passwordKey: \"JIRA_API_TOKEN\",\n },\n credentialKeys: [\"JIRA_BASE_URL\", \"JIRA_USER_EMAIL\", \"JIRA_API_TOKEN\"],\n docsUrls: [\n \"https://developer.atlassian.com/cloud/jira/platform/rest/v3/intro/\",\n ],\n specUrls: [\n \"https://dac-static.atlassian.com/cloud/jira/platform/swagger-v3.v3.json\",\n ],\n templateUses: [\"analytics\"],\n examples: [\n {\n label: \"JQL search\",\n method: \"GET\",\n path: \"/rest/api/3/search/jql\",\n },\n ],\n },\n mixpanel: {\n id: \"mixpanel\",\n label: \"Mixpanel\",\n defaultBaseUrl: \"https://mixpanel.com/api/query\",\n auth: {\n type: \"basic-raw\",\n key: \"MIXPANEL_SERVICE_ACCOUNT\",\n },\n credentialKeys: [\"MIXPANEL_PROJECT_ID\", \"MIXPANEL_SERVICE_ACCOUNT\"],\n docsUrls: [\"https://developer.mixpanel.com/reference/overview\"],\n allowedHostSuffixes: [\"mixpanel.com\"],\n templateUses: [\"analytics\"],\n placeholders: [\n {\n name: \"projectId\",\n credentialKey: \"MIXPANEL_PROJECT_ID\",\n label: \"Configured Mixpanel project ID\",\n },\n ],\n examples: [\n {\n label: \"Query events\",\n method: \"GET\",\n path: \"/events\",\n },\n ],\n notes: [\n \"Mixpanel uses multiple API hosts. You may pass full URLs for mixpanel.com or data.mixpanel.com endpoints.\",\n ],\n },\n notion: {\n id: \"notion\",\n label: \"Notion\",\n defaultBaseUrl: \"https://api.notion.com/v1\",\n auth: {\n type: \"bearer\",\n keys: [\"NOTION_API_KEY\"],\n workspaceProvider: \"notion\",\n },\n credentialKeys: [\"NOTION_API_KEY\"],\n docsUrls: [\"https://developers.notion.com/reference/intro\"],\n defaultHeaders: { \"Notion-Version\": \"2022-06-28\" },\n templateUses: [\"analytics\", \"brain\", \"content\", \"dispatch\"],\n examples: [{ label: \"Search\", method: \"POST\", path: \"/search\", body: {} }],\n },\n posthog: {\n id: \"posthog\",\n label: \"PostHog\",\n defaultBaseUrl: \"https://app.posthog.com\",\n baseUrlCredentialKey: \"POSTHOG_HOST\",\n auth: {\n type: \"bearer\",\n keys: [\"POSTHOG_API_KEY\"],\n },\n credentialKeys: [\"POSTHOG_API_KEY\", \"POSTHOG_PROJECT_ID\", \"POSTHOG_HOST\"],\n docsUrls: [\"https://posthog.com/docs/api\"],\n templateUses: [\"analytics\"],\n placeholders: [\n {\n name: \"projectId\",\n credentialKey: \"POSTHOG_PROJECT_ID\",\n label: \"Configured PostHog project ID\",\n },\n ],\n examples: [\n {\n label: \"List events\",\n method: \"GET\",\n path: \"/api/projects/{projectId}/events/\",\n },\n ],\n },\n prometheus: {\n id: \"prometheus\",\n label: \"Prometheus\",\n defaultBaseUrl: \"https://prometheus.example.com\",\n baseUrlCredentialKey: \"PROMETHEUS_URL\",\n auth: { type: \"prometheus\" },\n credentialKeys: [\n \"PROMETHEUS_URL\",\n \"PROMETHEUS_USERNAME\",\n \"PROMETHEUS_PASSWORD\",\n \"PROMETHEUS_BEARER_TOKEN\",\n ],\n docsUrls: [\"https://prometheus.io/docs/prometheus/latest/querying/api/\"],\n templateUses: [\"analytics\"],\n examples: [\n {\n label: \"Instant query\",\n method: \"GET\",\n path: \"/api/v1/query\",\n },\n ],\n },\n pylon: {\n id: \"pylon\",\n label: \"Pylon\",\n defaultBaseUrl: \"https://api.usepylon.com\",\n auth: {\n type: \"bearer\",\n keys: [\"PYLON_API_KEY\"],\n },\n credentialKeys: [\"PYLON_API_KEY\"],\n docsUrls: [\"https://docs.usepylon.com/pylon-docs/developer/api-reference\"],\n templateUses: [\"analytics\", \"calendar\"],\n examples: [{ label: \"List issues\", method: \"GET\", path: \"/issues\" }],\n },\n sentry: {\n id: \"sentry\",\n label: \"Sentry\",\n defaultBaseUrl: \"https://sentry.io/api/0\",\n auth: {\n type: \"bearer\",\n keys: [\"SENTRY_AUTH_TOKEN\", \"SENTRY_SERVER_TOKEN\"],\n },\n credentialKeys: [\n \"SENTRY_AUTH_TOKEN\",\n \"SENTRY_SERVER_TOKEN\",\n \"SENTRY_ORG_SLUG\",\n ],\n docsUrls: [\"https://docs.sentry.io/api/\"],\n templateUses: [\"analytics\"],\n placeholders: [\n {\n name: \"orgSlug\",\n credentialKey: \"SENTRY_ORG_SLUG\",\n label: \"Configured Sentry organization slug\",\n },\n ],\n examples: [\n {\n label: \"List issues for org\",\n method: \"GET\",\n path: \"/organizations/{orgSlug}/issues/\",\n },\n ],\n },\n slack: {\n id: \"slack\",\n label: \"Slack Web API\",\n defaultBaseUrl: \"https://slack.com/api\",\n auth: {\n type: \"bearer\",\n keys: [\"SLACK_BOT_TOKEN\"],\n workspaceProvider: \"slack\",\n },\n credentialKeys: [\"SLACK_BOT_TOKEN\", \"SLACK_BOT_TOKEN_2\"],\n docsUrls: [\"https://api.slack.com/web\"],\n specUrls: [\n \"https://api.slack.com/specs/openapi/v2/slack_web_openapi_v2_without_examples.json\",\n ],\n templateUses: [\"analytics\", \"brain\", \"dispatch\"],\n examples: [\n { label: \"Search messages\", method: \"GET\", path: \"/search.messages\" },\n { label: \"Post message\", method: \"POST\", path: \"/chat.postMessage\" },\n ],\n },\n stripe: {\n id: \"stripe\",\n label: \"Stripe\",\n defaultBaseUrl: \"https://api.stripe.com/v1\",\n auth: {\n type: \"bearer\",\n keys: [\"STRIPE_SECRET_KEY\"],\n },\n credentialKeys: [\"STRIPE_SECRET_KEY\"],\n docsUrls: [\"https://docs.stripe.com/api\"],\n specUrls: [\n \"https://raw.githubusercontent.com/stripe/openapi/master/openapi/spec3.json\",\n ],\n templateUses: [\"analytics\"],\n examples: [{ label: \"List customers\", method: \"GET\", path: \"/customers\" }],\n },\n twitter: {\n id: \"twitter\",\n label: \"Twitter/X via twitterapi.io\",\n defaultBaseUrl: \"https://api.twitterapi.io\",\n auth: {\n type: \"api-key-header\",\n key: \"TWITTER_BEARER_TOKEN\",\n header: \"X-API-Key\",\n },\n credentialKeys: [\"TWITTER_BEARER_TOKEN\"],\n docsUrls: [\"https://twitterapi.io/docs\"],\n templateUses: [\"analytics\"],\n examples: [\n {\n label: \"User tweets\",\n method: \"GET\",\n path: \"/twitter/user/last_tweets\",\n },\n ],\n },\n};\n\nexport function getProviderApiConfig(\n provider: ProviderApiId | string,\n): ProviderApiConfig {\n const config = PROVIDER_CONFIGS[provider as ProviderApiId];\n if (!config) throw new Error(`Unsupported provider API: ${provider}`);\n return config;\n}\n\nexport function isProviderApiId(provider: string): provider is ProviderApiId {\n return Object.prototype.hasOwnProperty.call(PROVIDER_CONFIGS, provider);\n}\n\nexport function listProviderApiIdsForTemplateUse(\n templateUse: WorkspaceConnectionTemplateUse,\n): ProviderApiId[] {\n return PROVIDER_API_IDS.filter((id) =>\n (PROVIDER_CONFIGS[id].templateUses ?? []).includes(templateUse),\n );\n}\n\nexport function listProviderApiCatalog(\n provider?: ProviderApiId | string,\n options: { providerIds?: readonly (ProviderApiId | string)[] } = {},\n) {\n const providerIds = normalizeProviderIds(options.providerIds);\n if (provider) {\n assertProviderAllowed(provider, providerIds);\n }\n const configs = provider\n ? [getProviderApiConfig(provider)]\n : providerIds.map((id) => getProviderApiConfig(id));\n return configs.map((config) => ({\n id: config.id,\n label: config.label,\n defaultBaseUrl: config.defaultBaseUrl,\n baseUrlCredentialKey: config.baseUrlCredentialKey ?? null,\n auth: describeAuth(config.auth),\n credentialKeys: config.credentialKeys,\n docsUrls: config.docsUrls,\n specUrls: config.specUrls ?? [],\n allowedHostSuffixes: config.allowedHostSuffixes ?? [],\n placeholders: config.placeholders ?? [],\n defaultHeaders: config.defaultHeaders ?? {},\n examples: config.examples ?? [],\n notes: config.notes ?? [],\n corpusRecipes: config.corpusRecipes ?? [],\n templateUses: config.templateUses ?? [],\n }));\n}\n\nexport function createProviderApiRuntime(\n options: ProviderApiRuntimeOptions,\n): ProviderApiRuntime {\n const providerIds = normalizeProviderIds(options.providerIds);\n const runtimeOptions: Required<\n Pick<ProviderApiRuntimeOptions, \"appId\" | \"localCredentialSource\">\n > &\n Omit<ProviderApiRuntimeOptions, \"appId\" | \"localCredentialSource\"> = {\n ...options,\n providerIds,\n localCredentialSource: options.localCredentialSource ?? \"app_local\",\n };\n return {\n providerIds,\n listCatalog: (provider) =>\n listProviderApiCatalogWithCustom(\n provider,\n { providerIds },\n runtimeOptions,\n ),\n fetchDocs: (docsOptions) =>\n fetchProviderApiDocs(docsOptions, runtimeOptions),\n executeRequest: (args) => executeProviderApiRequest(args, runtimeOptions),\n listGitHubRepositoryFiles: (args) =>\n listGitHubRepositoryFiles(args, runtimeOptions),\n searchGitHubRepositoryFiles: (args) =>\n searchGitHubRepositoryFiles(args, runtimeOptions),\n readGitHubRepositoryFile: (args) =>\n readGitHubRepositoryFile(args, runtimeOptions),\n writeGitHubRepositoryFile: (args) =>\n writeGitHubRepositoryFile(args, runtimeOptions),\n deleteGitHubRepositoryFile: (args) =>\n deleteGitHubRepositoryFile(args, runtimeOptions),\n };\n}\n\nexport async function fetchProviderApiDocs(\n options: ProviderApiDocsOptions,\n runtime: ProviderApiRuntimeOptions = { appId: \"app\" },\n) {\n await assertProviderAllowedAsync(options.provider, runtime);\n\n // Resolve config — may be a built-in or a custom provider.\n const builtIn = isProviderApiId(options.provider)\n ? getProviderApiConfig(options.provider)\n : null;\n const customConfig = builtIn\n ? null\n : await resolveCustomProvider(options.provider, runtime);\n\n if (!builtIn && !customConfig) {\n const known = await listAllProviderIds(runtime);\n throw new Error(\n `Unknown provider \"${options.provider}\". Known providers: ${known.join(\", \")}`,\n );\n }\n\n const catalog = builtIn\n ? listProviderApiCatalog(options.provider)[0]\n : customProviderToCatalogEntry(customConfig!);\n\n if (!options.url) {\n return {\n provider: options.provider,\n catalog,\n guidance:\n \"provider-api-docs can fetch ANY public http(s) URL — pass url to retrieve API documentation, OpenAPI specs, changelogs, or any public web page. Registered docsUrls above are curated starting points.\",\n };\n }\n\n // Open docs fetching: allow ANY public https/http URL.\n // The SSRF guard still applies — private/internal addresses are blocked.\n let url: URL;\n try {\n url = new URL(options.url);\n } catch {\n throw new Error(`Invalid docs URL: ${options.url}`);\n }\n if (url.protocol !== \"https:\" && url.protocol !== \"http:\") {\n throw new Error(`Docs URL must use https: or http: (got ${url.protocol})`);\n }\n if (await isBlockedExtensionUrlWithDns(url.href)) {\n throw new Error(`Blocked private/internal docs URL: ${url.href}`);\n }\n\n const response = await fetchWithTimeout(url.href, {\n method: \"GET\",\n maxBytes: clampMaxBytes(options.maxBytes),\n });\n\n const responseBody =\n response.text ??\n (response.json !== undefined ? JSON.stringify(response.json, null, 2) : \"\");\n const content = processWebContent({\n url: url.href,\n body: responseBody,\n contentType: response.contentType,\n responseMode: options.responseMode ?? \"auto\",\n extract: options.extract ?? \"readability\",\n includeLinks: options.includeLinks ?? true,\n search: options.search,\n maxChars: options.maxChars,\n });\n const responseForOutput =\n content.mode === \"raw\" ? response : compactProviderDocsResponse(response);\n\n return {\n provider: options.provider,\n catalog,\n request: { url: url.href },\n response: responseForOutput,\n ...(content.mode === \"raw\" ? {} : { content }),\n };\n}\n\nfunction compactProviderDocsResponse(response: ProviderApiHttpResponse) {\n return {\n status: response.status,\n statusText: response.statusText,\n ok: response.ok,\n elapsedMs: response.elapsedMs,\n headers: response.headers,\n contentType: response.contentType,\n size: response.size,\n truncated: response.truncated,\n };\n}\n\nexport async function executeProviderApiRequest(\n args: ProviderApiRequestArgs,\n runtime: ProviderApiRuntimeOptions,\n) {\n await assertProviderAllowedAsync(args.provider, runtime);\n\n // Check whether this is a built-in or custom provider.\n const builtIn = isProviderApiId(args.provider)\n ? getProviderApiConfig(args.provider)\n : null;\n const customConfig = builtIn\n ? null\n : await resolveCustomProvider(args.provider, runtime);\n\n if (!builtIn && !customConfig) {\n const known = await listAllProviderIds(runtime);\n throw new Error(\n `Unknown provider \"${args.provider}\". Known providers: ${known.join(\", \")}`,\n );\n }\n\n if (customConfig) {\n return executeCustomProviderApiRequest(args, customConfig, runtime);\n }\n\n // --- built-in provider path (original code) ---\n const config = builtIn!;\n const ctx = requireRuntimeCredentialContext(\n runtime,\n config.credentialKeys[0] ?? config.id,\n );\n const baseUrl = await resolveBaseUrl(config, runtime, ctx, args);\n const placeholders = await resolvePlaceholders(config, runtime, ctx, args);\n const method = normalizeMethod(args.method);\n const url = buildProviderUrl({\n config,\n baseUrl,\n rawPath: substituteString(args.path, placeholders),\n query: substituteUnknown(args.query, placeholders),\n });\n if (await isBlockedExtensionUrlWithDns(url.href)) {\n throw new Error(`Blocked private/internal provider URL: ${url.href}`);\n }\n\n const auth =\n args.auth === \"none\"\n ? emptyAuth()\n : await resolveAuth(config, runtime, ctx, args);\n const extraHeaders = substituteUnknown(args.headers ?? {}, placeholders);\n const headers = sanitizeOutboundHeaders({\n ...(config.defaultHeaders ?? {}),\n ...(isPlainRecord(extraHeaders) ? extraHeaders : {}),\n ...auth.headers,\n });\n\n // Allow a much larger maxBytes ceiling when writing to a workspace file.\n const effectiveMaxBytes = args.saveToFile\n ? SAVE_TO_FILE_MAX_BYTES\n : clampMaxBytes(args.maxBytes);\n const quotaIdentity = createProviderQuotaIdentity({\n appId: runtimeOptionsAppId(runtime),\n providerId: config.id,\n ctx,\n credentialSources: auth.credentialSources,\n connectionId: args.connectionId,\n accountId: args.accountId,\n });\n\n // --- fetchAllPages mode ---\n if (args.fetchAllPages) {\n const pageCfg = args.fetchAllPages;\n const { items, pageCount, lastStatus, lastContentType } =\n await fetchAllPages(pageCfg, async (extra) => {\n const queryWithCursor = extra?.query\n ? mergeQueryObjects(\n substituteUnknown(args.query, placeholders),\n extra.query,\n )\n : substituteUnknown(args.query, placeholders);\n const pageUrl = buildProviderUrl({\n config,\n baseUrl,\n rawPath: substituteString(args.path, placeholders),\n query: queryWithCursor,\n });\n const bodyWithCursor = extra?.bodyCursor\n ? setValueAtPath(\n substituteUnknown(args.body, placeholders),\n extra.bodyCursor.path,\n extra.bodyCursor.value,\n )\n : substituteUnknown(args.body, placeholders);\n const pageBody = prepareBody(bodyWithCursor, { ...headers });\n const requestKey = createProviderRequestDedupeKey({\n method,\n url: pageUrl.href,\n body: pageBody,\n headers,\n });\n const resp = await fetchWithTimeout(pageUrl.href, {\n method,\n headers,\n body: pageBody,\n maxBytes: effectiveMaxBytes,\n timeoutMs: clampTimeout(args.timeoutMs),\n secretValues: auth.secretValues,\n quota: {\n identity: quotaIdentity,\n method,\n target: describeProviderRequestTarget(\n pageUrl.href,\n auth.secretValues,\n ),\n requestKey,\n },\n });\n return {\n text:\n resp.text ??\n (resp.json !== undefined ? JSON.stringify(resp.json) : \"\"),\n contentType: resp.contentType,\n status: resp.status,\n ok: resp.ok,\n };\n });\n\n const allItemsJson = JSON.stringify(items, null, 2);\n const metadata = {\n provider: { id: config.id, label: config.label },\n pagesRead: pageCount,\n totalItems: Array.isArray(items) ? items.length : 0,\n lastStatus,\n };\n\n if (args.saveToFile) {\n const saved = (await handleSaveToFile(\n args.saveToFile,\n allItemsJson,\n lastContentType ?? \"application/json\",\n lastStatus,\n )) as Record<string, unknown>;\n return { ...metadata, ...saved };\n }\n\n return { ...metadata, items };\n }\n\n // --- Single request ---\n const body = prepareBody(substituteUnknown(args.body, placeholders), headers);\n const requestKey = createProviderRequestDedupeKey({\n method,\n url: url.href,\n body,\n headers,\n });\n const response = await fetchWithTimeout(url.href, {\n method,\n headers,\n body,\n maxBytes: effectiveMaxBytes,\n timeoutMs: clampTimeout(args.timeoutMs),\n secretValues: auth.secretValues,\n quota: {\n identity: quotaIdentity,\n method,\n target: describeProviderRequestTarget(url.href, auth.secretValues),\n requestKey,\n },\n });\n\n // saveToFile: write full body to workspace file and return compact summary.\n if (args.saveToFile) {\n const rawText =\n response.text ??\n (response.json !== undefined ? JSON.stringify(response.json) : \"\");\n const saved = (await handleSaveToFile(\n args.saveToFile,\n rawText,\n response.contentType,\n response.status,\n )) as Record<string, unknown>;\n return {\n provider: { id: config.id, label: config.label },\n request: {\n method,\n url: redactString(url.href, auth.secretValues),\n path: redactString(`${url.pathname}${url.search}`, auth.secretValues),\n },\n ...saved,\n };\n }\n\n return {\n provider: {\n id: config.id,\n label: config.label,\n docsUrls: config.docsUrls,\n specUrls: config.specUrls ?? [],\n },\n request: {\n method,\n url: redactString(url.href, auth.secretValues),\n path: redactString(`${url.pathname}${url.search}`, auth.secretValues),\n auth: args.auth === \"none\" ? \"none\" : describeAuth(config.auth),\n credentialSources: auth.credentialSources.map((source) => ({\n ...source,\n fingerprint: fingerprint(source.key),\n })),\n headerNames: Object.keys(headers).filter(\n (name) => name.toLowerCase() !== \"authorization\",\n ),\n ...(args.accountId ? { accountId: args.accountId } : {}),\n ...(args.connectionId ? { connectionId: args.connectionId } : {}),\n },\n response,\n guidance:\n \"This was a raw provider API request. Use provider docs/spec URLs to choose endpoints and include method/path/status plus relevant filters in the methodology. Prefer this escape hatch whenever canned actions are too narrow.\",\n };\n}\n\nconst GITHUB_REPO_FILES_DEFAULT_MAX = 1_000;\nconst GITHUB_REPO_FILES_MAX = 10_000;\nconst GITHUB_CODE_SEARCH_DEFAULT_PER_PAGE = 30;\nconst GITHUB_CODE_SEARCH_MAX_PER_PAGE = 100;\n\nexport async function listGitHubRepositoryFiles(\n args: GitHubRepositoryFileListArgs,\n runtime: ProviderApiRuntimeOptions,\n): Promise<GitHubRepositoryFileListResult> {\n const repository = normalizeGitHubRepository(args);\n const pathPrefix = normalizeGitHubFilePath(args.path);\n const maxFiles = clampPositiveInt(\n args.maxFiles,\n GITHUB_REPO_FILES_DEFAULT_MAX,\n GITHUB_REPO_FILES_MAX,\n );\n\n if (args.recursive) {\n const ref =\n args.ref?.trim() || (await resolveGitHubDefaultBranch(args, runtime));\n const { json, response } = await executeGitHubJsonRequest({\n runtime,\n label: \"list repository tree\",\n args: {\n provider: \"github\",\n path: `${githubRepoApiPath(repository)}/git/trees/${encodeURIComponent(\n ref,\n )}`,\n query: { recursive: \"1\" },\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n },\n });\n const tree = asRecord(json);\n const rawEntries = Array.isArray(tree.tree) ? tree.tree : [];\n const entries = rawEntries\n .map((entry) =>\n normalizeGitHubTreeEntry(entry, {\n owner: repository.owner,\n repo: repository.repo,\n ref,\n }),\n )\n .filter((entry): entry is GitHubRepositoryFileEntry => !!entry)\n .filter((entry) => args.includeDirectories || entry.type === \"file\")\n .filter((entry) => githubPathMatchesPrefix(entry.path, pathPrefix));\n const limitedEntries = entries.slice(0, maxFiles);\n\n return {\n repository,\n ref,\n path: pathPrefix,\n recursive: true,\n entries: limitedEntries,\n totalCount: entries.length,\n truncated:\n Boolean(tree.truncated) || entries.length > limitedEntries.length,\n providerTruncated: Boolean(tree.truncated),\n response: compactResponseStatus(response),\n };\n }\n\n const { json, response } = await executeGitHubJsonRequest({\n runtime,\n label: \"list repository contents\",\n args: {\n provider: \"github\",\n path: githubContentsApiPath(repository, pathPrefix),\n query: args.ref ? { ref: args.ref } : undefined,\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n },\n });\n const rawEntries = Array.isArray(json) ? json : [json];\n const entries = rawEntries\n .map(normalizeGitHubContentsEntry)\n .filter((entry): entry is GitHubRepositoryFileEntry => !!entry)\n .filter((entry) => args.includeDirectories || entry.type === \"file\");\n const limitedEntries = entries.slice(0, maxFiles);\n\n return {\n repository,\n ref: args.ref?.trim() || null,\n path: pathPrefix,\n recursive: false,\n entries: limitedEntries,\n totalCount: entries.length,\n truncated: entries.length > limitedEntries.length,\n providerTruncated: false,\n response: compactResponseStatus(response),\n };\n}\n\nexport async function searchGitHubRepositoryFiles(\n args: GitHubRepositoryFileSearchArgs,\n runtime: ProviderApiRuntimeOptions,\n): Promise<GitHubRepositoryFileSearchResult> {\n const repository = normalizeGitHubRepository(args);\n const query = args.query?.trim() ?? \"\";\n\n if (!query) {\n const listed = await listGitHubRepositoryFiles(\n {\n owner: repository.owner,\n repo: repository.repo,\n path: args.path,\n ref: args.ref,\n recursive: true,\n includeDirectories: false,\n maxFiles: GITHUB_REPO_FILES_MAX,\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n },\n runtime,\n );\n const filtered = listed.entries.filter((entry) =>\n githubTreeEntryMatchesSearchFilters(entry, args),\n );\n const maxFiles = clampPositiveInt(\n args.maxFiles,\n GITHUB_REPO_FILES_DEFAULT_MAX,\n GITHUB_REPO_FILES_MAX,\n );\n const limitedItems = filtered.slice(0, maxFiles);\n return {\n repository,\n mode: \"tree-filter\",\n query: null,\n ref: listed.ref,\n items: limitedItems,\n totalCount: filtered.length,\n truncated: listed.truncated || filtered.length > limitedItems.length,\n incompleteResults: listed.providerTruncated,\n response: listed.response,\n };\n }\n\n const perPage = clampPositiveInt(\n args.perPage,\n GITHUB_CODE_SEARCH_DEFAULT_PER_PAGE,\n GITHUB_CODE_SEARCH_MAX_PER_PAGE,\n );\n const page = clampPositiveInt(args.page, 1, 100);\n const q = buildGitHubCodeSearchQuery(repository, args, query);\n const { json, response } = await executeGitHubJsonRequest({\n runtime,\n label: \"search repository code\",\n args: {\n provider: \"github\",\n path: \"/search/code\",\n query: { q, per_page: perPage, page },\n headers: args.includeTextMatches\n ? { Accept: \"application/vnd.github.text-match+json\" }\n : undefined,\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n },\n });\n const body = asRecord(json);\n const rawItems = Array.isArray(body.items) ? body.items : [];\n const items = rawItems\n .map(normalizeGitHubCodeSearchEntry)\n .filter((entry): entry is GitHubRepositoryFileEntry => !!entry);\n\n return {\n repository,\n mode: \"code-search\",\n query: q,\n ref: null,\n items,\n totalCount:\n typeof body.total_count === \"number\" && Number.isFinite(body.total_count)\n ? body.total_count\n : items.length,\n truncated: items.length >= perPage,\n incompleteResults: Boolean(body.incomplete_results),\n response: compactResponseStatus(response),\n };\n}\n\nexport async function readGitHubRepositoryFile(\n args: GitHubRepositoryFileReadArgs,\n runtime: ProviderApiRuntimeOptions,\n): Promise<GitHubRepositoryFileReadResult> {\n const repository = normalizeGitHubRepository(args);\n const path = requireGitHubFilePath(args.path);\n const { json, response } = await executeGitHubJsonRequest({\n runtime,\n label: \"read repository file\",\n args: {\n provider: \"github\",\n path: githubContentsApiPath(repository, path),\n query: args.ref ? { ref: args.ref } : undefined,\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n },\n });\n if (Array.isArray(json)) {\n throw new Error(\n `GitHub path \"${path}\" is a directory. Use listGitHubRepositoryFiles or the github-repo-files action with operation=\"list\".`,\n );\n }\n const file = asRecord(json);\n const encoding =\n typeof file.encoding === \"string\" ? file.encoding.toLowerCase() : null;\n const rawBase64 =\n encoding === \"base64\" && typeof file.content === \"string\"\n ? file.content.replace(/\\s+/g, \"\")\n : null;\n const content = rawBase64\n ? Buffer.from(rawBase64, \"base64\").toString(\"utf8\")\n : null;\n const sha = typeof file.sha === \"string\" ? file.sha : \"\";\n if (!sha) throw new Error(`GitHub read for \"${path}\" did not return a SHA.`);\n\n return {\n repository,\n path: typeof file.path === \"string\" ? file.path : path,\n ref: args.ref?.trim() || null,\n name: typeof file.name === \"string\" ? file.name : githubBasename(path),\n type: typeof file.type === \"string\" ? file.type : \"file\",\n sha,\n size: typeof file.size === \"number\" ? file.size : 0,\n encoding,\n content,\n contentBase64: rawBase64,\n url: typeof file.url === \"string\" ? file.url : null,\n htmlUrl: typeof file.html_url === \"string\" ? file.html_url : null,\n downloadUrl:\n typeof file.download_url === \"string\" ? file.download_url : null,\n response: compactResponseStatus(response),\n };\n}\n\nexport async function writeGitHubRepositoryFile(\n args: GitHubRepositoryFileWriteArgs,\n runtime: ProviderApiRuntimeOptions,\n): Promise<GitHubRepositoryFileWriteResult> {\n const repository = normalizeGitHubRepository(args);\n const path = requireGitHubFilePath(args.path);\n const message = args.message.trim();\n if (!message) throw new Error(\"GitHub file write requires a commit message.\");\n\n let sha = args.sha?.trim();\n if (!sha && args.overwriteExisting) {\n try {\n const existing = await readGitHubRepositoryFile(\n {\n owner: repository.owner,\n repo: repository.repo,\n path,\n ref: args.branch,\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n },\n runtime,\n );\n sha = existing.sha;\n } catch (error) {\n if (!isGitHubNotFoundError(error)) throw error;\n }\n }\n\n const body: Record<string, unknown> = {\n message,\n content: Buffer.from(args.content, \"utf8\").toString(\"base64\"),\n };\n if (sha) body.sha = sha;\n if (args.branch?.trim()) body.branch = args.branch.trim();\n if (args.committer) body.committer = args.committer;\n if (args.author) body.author = args.author;\n\n const { json, response } = await executeGitHubJsonRequest({\n runtime,\n label: \"write repository file\",\n args: {\n provider: \"github\",\n method: \"PUT\",\n path: githubContentsApiPath(repository, path),\n body,\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n },\n });\n const result = asRecord(json);\n const content = asRecord(result.content);\n const commit = asRecord(result.commit);\n\n return {\n repository,\n path,\n branch: args.branch?.trim() || null,\n content: {\n name: stringOrNull(content.name),\n path: stringOrNull(content.path),\n sha: stringOrNull(content.sha),\n url: stringOrNull(content.url),\n htmlUrl: stringOrNull(content.html_url),\n },\n commit: {\n sha: stringOrNull(commit.sha),\n url: stringOrNull(commit.url),\n htmlUrl: stringOrNull(commit.html_url),\n message: stringOrNull(commit.message),\n },\n response: compactResponseStatus(response),\n };\n}\n\nexport async function deleteGitHubRepositoryFile(\n args: GitHubRepositoryFileDeleteArgs,\n runtime: ProviderApiRuntimeOptions,\n): Promise<GitHubRepositoryFileDeleteResult> {\n const repository = normalizeGitHubRepository(args);\n const path = requireGitHubFilePath(args.path);\n const message = args.message.trim();\n if (!message) {\n throw new Error(\"GitHub file delete requires a commit message.\");\n }\n\n let sha = args.sha?.trim();\n if (!sha) {\n const existing = await readGitHubRepositoryFile(\n {\n owner: repository.owner,\n repo: repository.repo,\n path,\n ref: args.branch,\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n },\n runtime,\n );\n sha = existing.sha;\n }\n\n const body: Record<string, unknown> = { message, sha };\n if (args.branch?.trim()) body.branch = args.branch.trim();\n if (args.committer) body.committer = args.committer;\n if (args.author) body.author = args.author;\n\n const { json, response } = await executeGitHubJsonRequest({\n runtime,\n label: \"delete repository file\",\n args: {\n provider: \"github\",\n method: \"DELETE\",\n path: githubContentsApiPath(repository, path),\n body,\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n },\n });\n const result = asRecord(json);\n const commit = asRecord(result.commit);\n\n return {\n repository,\n path,\n branch: args.branch?.trim() || null,\n commit: {\n sha: stringOrNull(commit.sha),\n url: stringOrNull(commit.url),\n htmlUrl: stringOrNull(commit.html_url),\n message: stringOrNull(commit.message),\n },\n response: compactResponseStatus(response),\n };\n}\n\nasync function executeGitHubJsonRequest(options: {\n runtime: ProviderApiRuntimeOptions;\n label: string;\n args: Omit<ProviderApiRequestArgs, \"provider\"> & { provider?: \"github\" };\n}): Promise<{ json: unknown; response: ProviderApiHttpResponse }> {\n const result = (await executeProviderApiRequest(\n { provider: \"github\", ...options.args },\n options.runtime,\n )) as Record<string, unknown>;\n const response = result.response as ProviderApiHttpResponse | undefined;\n if (!response) {\n throw new Error(`GitHub ${options.label} returned an unexpected result.`);\n }\n if (!response.ok) {\n throw new Error(\n `GitHub ${options.label} failed with HTTP ${response.status}${\n response.statusText ? ` ${response.statusText}` : \"\"\n }${providerResponseErrorDetail(response)}`,\n );\n }\n return { json: response.json, response };\n}\n\nasync function resolveGitHubDefaultBranch(\n args: GitHubRepositoryRef & {\n connectionId?: string | null;\n timeoutMs?: number;\n maxBytes?: number;\n },\n runtime: ProviderApiRuntimeOptions,\n): Promise<string> {\n const repository = normalizeGitHubRepository(args);\n const { json } = await executeGitHubJsonRequest({\n runtime,\n label: \"get repository metadata\",\n args: {\n provider: \"github\",\n path: githubRepoApiPath(repository),\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n },\n });\n const body = asRecord(json);\n const defaultBranch = stringOrNull(body.default_branch);\n if (!defaultBranch) {\n throw new Error(\n `GitHub repository ${repository.owner}/${repository.repo} did not return a default branch.`,\n );\n }\n return defaultBranch;\n}\n\nfunction normalizeGitHubRepository(\n args: GitHubRepositoryRef,\n): GitHubRepositoryRef {\n const owner = args.owner.trim();\n const repo = args.repo.trim().replace(/\\.git$/i, \"\");\n if (!owner) throw new Error(\"GitHub repository owner is required.\");\n if (!repo) throw new Error(\"GitHub repository name is required.\");\n return { owner, repo };\n}\n\nfunction githubRepoApiPath(repository: GitHubRepositoryRef): string {\n return `/repos/${encodeURIComponent(repository.owner)}/${encodeURIComponent(\n repository.repo,\n )}`;\n}\n\nfunction githubContentsApiPath(\n repository: GitHubRepositoryRef,\n filePath: string,\n): string {\n const encodedPath = encodeGitHubFilePath(filePath);\n return `${githubRepoApiPath(repository)}/contents${\n encodedPath ? `/${encodedPath}` : \"\"\n }`;\n}\n\nfunction encodeGitHubFilePath(filePath: string): string {\n return normalizeGitHubFilePath(filePath)\n .split(\"/\")\n .filter(Boolean)\n .map((part) => encodeURIComponent(part))\n .join(\"/\");\n}\n\nfunction normalizeGitHubFilePath(filePath: string | undefined): string {\n return (filePath ?? \"\").trim().replace(/^\\/+|\\/+$/g, \"\");\n}\n\nfunction requireGitHubFilePath(filePath: string): string {\n const normalized = normalizeGitHubFilePath(filePath);\n if (!normalized) throw new Error(\"GitHub file path is required.\");\n return normalized;\n}\n\nfunction githubBasename(filePath: string): string {\n return filePath.split(\"/\").filter(Boolean).pop() ?? filePath;\n}\n\nfunction githubPathMatchesPrefix(path: string, prefix: string): boolean {\n if (!prefix) return true;\n return path === prefix || path.startsWith(`${prefix}/`);\n}\n\nfunction normalizeGitHubTreeEntry(\n value: unknown,\n options: GitHubRepositoryRef & { ref: string },\n): GitHubRepositoryFileEntry | null {\n const entry = asRecord(value);\n const path = stringOrNull(entry.path);\n if (!path) return null;\n const type = stringOrNull(entry.type);\n const normalizedType =\n type === \"blob\"\n ? \"file\"\n : type === \"tree\"\n ? \"dir\"\n : type === \"commit\"\n ? \"submodule\"\n : \"unknown\";\n return {\n name: githubBasename(path),\n path,\n type: normalizedType,\n sha: stringOrNull(entry.sha),\n size: numberOrNull(entry.size),\n url: stringOrNull(entry.url),\n htmlUrl:\n normalizedType === \"file\"\n ? githubWebFileUrl(options, path)\n : normalizedType === \"dir\"\n ? githubWebTreeUrl(options, path)\n : null,\n downloadUrl: null,\n };\n}\n\nfunction normalizeGitHubContentsEntry(\n value: unknown,\n): GitHubRepositoryFileEntry | null {\n const entry = asRecord(value);\n const path = stringOrNull(entry.path);\n if (!path) return null;\n const type = stringOrNull(entry.type);\n return {\n name: stringOrNull(entry.name) ?? githubBasename(path),\n path,\n type:\n type === \"file\" ||\n type === \"dir\" ||\n type === \"symlink\" ||\n type === \"submodule\"\n ? type\n : \"unknown\",\n sha: stringOrNull(entry.sha),\n size: numberOrNull(entry.size),\n url: stringOrNull(entry.url),\n htmlUrl: stringOrNull(entry.html_url),\n downloadUrl: stringOrNull(entry.download_url),\n };\n}\n\nfunction normalizeGitHubCodeSearchEntry(\n value: unknown,\n): GitHubRepositoryFileEntry | null {\n return normalizeGitHubContentsEntry({ ...asRecord(value), type: \"file\" });\n}\n\nfunction githubTreeEntryMatchesSearchFilters(\n entry: GitHubRepositoryFileEntry,\n args: GitHubRepositoryFileSearchArgs,\n): boolean {\n const filename = args.filename?.trim();\n if (filename && entry.name !== filename) return false;\n const extension = args.extension?.trim().replace(/^\\./, \"\");\n if (extension && !entry.path.endsWith(`.${extension}`)) return false;\n const pathFilter = normalizeGitHubFilePath(args.path);\n if (pathFilter && !entry.path.includes(pathFilter)) return false;\n return true;\n}\n\nfunction buildGitHubCodeSearchQuery(\n repository: GitHubRepositoryRef,\n args: GitHubRepositoryFileSearchArgs,\n query: string,\n): string {\n const qualifiers = [`repo:${repository.owner}/${repository.repo}`];\n const path = normalizeGitHubFilePath(args.path);\n if (path) qualifiers.push(`path:${quoteGitHubSearchQualifier(path)}`);\n if (args.filename?.trim()) {\n qualifiers.push(\n `filename:${quoteGitHubSearchQualifier(args.filename.trim())}`,\n );\n }\n if (args.extension?.trim()) {\n qualifiers.push(\n `extension:${quoteGitHubSearchQualifier(\n args.extension.trim().replace(/^\\./, \"\"),\n )}`,\n );\n }\n if (args.language?.trim()) {\n qualifiers.push(\n `language:${quoteGitHubSearchQualifier(args.language.trim())}`,\n );\n }\n return [query, \"in:file\", ...qualifiers].join(\" \");\n}\n\nfunction quoteGitHubSearchQualifier(value: string): string {\n return /\\s/.test(value) ? JSON.stringify(value) : value;\n}\n\nfunction githubWebFileUrl(\n options: GitHubRepositoryRef & { ref: string },\n filePath: string,\n): string {\n return `https://github.com/${encodeURIComponent(\n options.owner,\n )}/${encodeURIComponent(options.repo)}/blob/${encodeURIComponent(\n options.ref,\n )}/${encodeGitHubFilePath(filePath)}`;\n}\n\nfunction githubWebTreeUrl(\n options: GitHubRepositoryRef & { ref: string },\n filePath: string,\n): string {\n return `https://github.com/${encodeURIComponent(\n options.owner,\n )}/${encodeURIComponent(options.repo)}/tree/${encodeURIComponent(\n options.ref,\n )}/${encodeGitHubFilePath(filePath)}`;\n}\n\nfunction clampPositiveInt(\n value: number | undefined,\n defaultValue: number,\n maxValue: number,\n): number {\n if (!Number.isFinite(value) || value! <= 0) return defaultValue;\n return Math.min(maxValue, Math.floor(value!));\n}\n\nfunction compactResponseStatus(\n response: ProviderApiHttpResponse,\n): Pick<ProviderApiHttpResponse, \"status\" | \"statusText\" | \"ok\"> {\n return {\n status: response.status,\n statusText: response.statusText,\n ok: response.ok,\n };\n}\n\nfunction providerResponseErrorDetail(\n response: ProviderApiHttpResponse,\n): string {\n const body = asRecord(response.json);\n const message = stringOrNull(body.message);\n const detail =\n message ??\n (typeof response.text === \"string\"\n ? response.text.replace(/\\s+/g, \" \").trim().slice(0, 500)\n : \"\");\n return detail ? `: ${detail}` : \"\";\n}\n\nfunction isGitHubNotFoundError(error: unknown): boolean {\n return error instanceof Error && /\\bHTTP 404\\b/.test(error.message);\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction stringOrNull(value: unknown): string | null {\n return typeof value === \"string\" ? value : null;\n}\n\nfunction numberOrNull(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\n// ---------------------------------------------------------------------------\n// Custom provider execution\n// ---------------------------------------------------------------------------\n\nasync function executeCustomProviderApiRequest(\n args: ProviderApiRequestArgs,\n customConfig: CustomProviderConfig,\n runtime: ProviderApiRuntimeOptions,\n): Promise<unknown> {\n const ctx = requireRuntimeCredentialContext(runtime, customConfig.id);\n const method = normalizeMethod(args.method);\n const baseUrl = customConfig.baseUrl;\n\n // Build a lightweight ProviderApiConfig-like object so we can reuse\n // buildProviderUrl (which validates allowed hosts).\n const syntheticConfig: ProviderApiConfig = {\n id: customConfig.id as ProviderApiId,\n label: customConfig.label,\n defaultBaseUrl: baseUrl,\n auth: { type: \"none\" },\n credentialKeys: [],\n docsUrls: customConfig.docsUrls,\n allowedHostSuffixes: customConfig.allowedHostSuffixes,\n defaultHeaders: customConfig.defaultHeaders,\n };\n\n const url = buildProviderUrl({\n config: syntheticConfig,\n baseUrl,\n rawPath: args.path,\n query: args.query,\n });\n\n if (await isBlockedExtensionUrlWithDns(url.href)) {\n throw new Error(`Blocked private/internal provider URL: ${url.href}`);\n }\n\n const auth =\n args.auth === \"none\"\n ? emptyAuth()\n : await resolveCustomAuth(customConfig, runtime, ctx, args);\n\n const extraHeaders = args.headers ?? {};\n const headers = sanitizeOutboundHeaders({\n ...(customConfig.defaultHeaders ?? {}),\n ...(isPlainRecord(extraHeaders) ? extraHeaders : {}),\n ...auth.headers,\n });\n const body = prepareBody(args.body, headers);\n\n const effectiveMaxBytes = args.saveToFile\n ? SAVE_TO_FILE_MAX_BYTES\n : clampMaxBytes(args.maxBytes);\n const quotaIdentity = createProviderQuotaIdentity({\n appId: runtimeOptionsAppId(runtime),\n providerId: customConfig.id,\n ctx,\n credentialSources: auth.credentialSources,\n connectionId: args.connectionId,\n accountId: args.accountId,\n });\n\n // --- fetchAllPages mode (same cursor pagination as built-in providers) ---\n if (args.fetchAllPages) {\n const pageCfg = args.fetchAllPages;\n const { items, pageCount, lastStatus, lastContentType } =\n await fetchAllPages(pageCfg, async (extra) => {\n const queryWithCursor = extra?.query\n ? mergeQueryObjects(args.query, extra.query)\n : args.query;\n const pageUrl = buildProviderUrl({\n config: syntheticConfig,\n baseUrl,\n rawPath: args.path,\n query: queryWithCursor,\n });\n const bodyWithCursor = extra?.bodyCursor\n ? setValueAtPath(\n args.body,\n extra.bodyCursor.path,\n extra.bodyCursor.value,\n )\n : args.body;\n const pageBody = prepareBody(bodyWithCursor, { ...headers });\n const requestKey = createProviderRequestDedupeKey({\n method,\n url: pageUrl.href,\n body: pageBody,\n headers,\n });\n const resp = await fetchWithTimeout(pageUrl.href, {\n method,\n headers,\n body: pageBody,\n maxBytes: effectiveMaxBytes,\n timeoutMs: clampTimeout(args.timeoutMs),\n secretValues: auth.secretValues,\n quota: {\n identity: quotaIdentity,\n method,\n target: describeProviderRequestTarget(\n pageUrl.href,\n auth.secretValues,\n ),\n requestKey,\n },\n });\n return {\n text:\n resp.text ??\n (resp.json !== undefined ? JSON.stringify(resp.json) : \"\"),\n contentType: resp.contentType,\n status: resp.status,\n ok: resp.ok,\n };\n });\n\n const allItemsJson = JSON.stringify(items, null, 2);\n const metadata = {\n provider: {\n id: customConfig.id,\n label: customConfig.label,\n custom: true,\n },\n pagesRead: pageCount,\n totalItems: Array.isArray(items) ? items.length : 0,\n lastStatus,\n };\n\n if (args.saveToFile) {\n const saved = (await handleSaveToFile(\n args.saveToFile,\n allItemsJson,\n lastContentType ?? \"application/json\",\n lastStatus,\n )) as Record<string, unknown>;\n return { ...metadata, ...saved };\n }\n\n return { ...metadata, items };\n }\n\n const response = await fetchWithTimeout(url.href, {\n method,\n headers,\n body,\n maxBytes: effectiveMaxBytes,\n timeoutMs: clampTimeout(args.timeoutMs),\n secretValues: auth.secretValues,\n quota: {\n identity: quotaIdentity,\n method,\n target: describeProviderRequestTarget(url.href, auth.secretValues),\n requestKey: createProviderRequestDedupeKey({\n method,\n url: url.href,\n body,\n headers,\n }),\n },\n });\n\n if (args.saveToFile) {\n const rawText =\n response.text ??\n (response.json !== undefined ? JSON.stringify(response.json) : \"\");\n const saved = (await handleSaveToFile(\n args.saveToFile,\n rawText,\n response.contentType,\n response.status,\n )) as Record<string, unknown>;\n return {\n provider: {\n id: customConfig.id,\n label: customConfig.label,\n custom: true,\n },\n request: {\n method,\n url: redactString(url.href, auth.secretValues),\n path: redactString(`${url.pathname}${url.search}`, auth.secretValues),\n },\n ...saved,\n };\n }\n\n return {\n provider: {\n id: customConfig.id,\n label: customConfig.label,\n docsUrls: customConfig.docsUrls,\n specUrls: [],\n custom: true,\n },\n request: {\n method,\n url: redactString(url.href, auth.secretValues),\n path: redactString(`${url.pathname}${url.search}`, auth.secretValues),\n auth:\n args.auth === \"none\" ? \"none\" : describeCustomAuth(customConfig.auth),\n credentialSources: auth.credentialSources.map((source) => ({\n ...source,\n fingerprint: fingerprint(source.key),\n })),\n headerNames: Object.keys(headers).filter(\n (name) => name.toLowerCase() !== \"authorization\",\n ),\n },\n response,\n guidance:\n \"This was a raw provider API request to a custom provider. Use provider docs URLs to choose endpoints.\",\n };\n}\n\nasync function resolveCustomAuth(\n customConfig: CustomProviderConfig,\n runtime: ProviderApiRuntimeOptions,\n ctx: CredentialContext,\n args: ProviderApiRequestArgs,\n): Promise<ResolvedAuth> {\n const auth = customConfig.auth;\n if (auth.type === \"none\") return emptyAuth();\n\n if (auth.type === \"bearer\") {\n const credential = await resolveRequiredCredentialByKey({\n provider: customConfig.id,\n key: auth.credentialKey,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n return {\n headers: { Authorization: `Bearer ${credential.value}` },\n credentialSources: [omitCredentialValue(credential)],\n secretValues: [credential.value],\n };\n }\n\n if (auth.type === \"basic\") {\n const username = await resolveRequiredCredentialByKey({\n provider: customConfig.id,\n key: auth.usernameKey,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n const password =\n auth.passwordKey === auth.usernameKey\n ? username\n : await resolveRequiredCredentialByKey({\n provider: customConfig.id,\n key: auth.passwordKey,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n const encoded = Buffer.from(`${username.value}:${password.value}`).toString(\n \"base64\",\n );\n return {\n headers: { Authorization: `Basic ${encoded}` },\n credentialSources: [\n omitCredentialValue(username),\n ...(password.key === username.key\n ? []\n : [omitCredentialValue(password)]),\n ],\n secretValues: [username.value, password.value, encoded],\n };\n }\n\n if (auth.type === \"api-key-header\") {\n const credential = await resolveRequiredCredentialByKey({\n provider: customConfig.id,\n key: auth.credentialKey,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n return {\n headers: { [auth.headerName]: credential.value },\n credentialSources: [omitCredentialValue(credential)],\n secretValues: [credential.value],\n };\n }\n\n return emptyAuth();\n}\n\n/** Resolve a credential by key name (no workspace-provider lookup for custom). */\nasync function resolveRequiredCredentialByKey(options: {\n provider: string;\n key: string;\n ctx: CredentialContext;\n runtime: ProviderApiRuntimeOptions;\n connectionId?: string | null;\n}): Promise<ProviderApiResolvedCredential> {\n const localCredentialSource =\n options.runtime.localCredentialSource ?? \"app_local\";\n const lookup: ProviderApiCredentialLookupOptions = {\n appId: options.runtime.appId,\n provider: options.provider,\n key: options.key,\n ctx: options.ctx,\n workspaceProvider: undefined,\n connectionId: options.connectionId,\n localCredentialSource,\n };\n const resolver =\n options.runtime.resolveCredential ?? defaultProviderApiCredentialResolver;\n const credential = await resolver(lookup);\n if (!credential?.value) {\n throw new Error(\n `Credential \"${options.key}\" not configured for custom provider \"${options.provider}\".`,\n );\n }\n return credential;\n}\n\nfunction describeCustomAuth(auth: CustomProviderAuthKind): string {\n if (auth.type === \"none\") return \"none\";\n if (auth.type === \"bearer\") return \"bearer\";\n if (auth.type === \"basic\") return \"basic\";\n if (auth.type === \"api-key-header\")\n return `api-key-header:${auth.headerName}`;\n return \"unknown\";\n}\n\n// ---------------------------------------------------------------------------\n// Catalog helpers with custom provider support\n// ---------------------------------------------------------------------------\n\n/**\n * Convert a custom provider to the same catalog shape as built-in providers.\n */\nfunction customProviderToCatalogEntry(config: CustomProviderConfig) {\n return {\n id: config.id,\n label: config.label,\n defaultBaseUrl: config.baseUrl,\n baseUrlCredentialKey: null,\n auth: describeCustomAuth(config.auth),\n credentialKeys: extractCredentialKeysFromCustomAuth(config.auth),\n docsUrls: config.docsUrls,\n specUrls: [] as string[],\n allowedHostSuffixes: config.allowedHostSuffixes,\n placeholders: [] as unknown[],\n defaultHeaders: config.defaultHeaders,\n examples: [] as unknown[],\n notes: config.notes ? [config.notes] : ([] as string[]),\n corpusRecipes: [] as unknown[],\n templateUses: [] as string[],\n custom: true,\n };\n}\n\nfunction extractCredentialKeysFromCustomAuth(\n auth: CustomProviderAuthKind,\n): string[] {\n if (auth.type === \"bearer\") return [auth.credentialKey];\n if (auth.type === \"basic\") {\n return auth.usernameKey === auth.passwordKey\n ? [auth.usernameKey]\n : [auth.usernameKey, auth.passwordKey];\n }\n if (auth.type === \"api-key-header\") return [auth.credentialKey];\n return [];\n}\n\n/**\n * List catalog entries including custom providers (merged after built-ins).\n */\nasync function listProviderApiCatalogWithCustom(\n provider: ProviderApiId | string | undefined,\n options: { providerIds?: readonly (ProviderApiId | string)[] },\n runtime: ProviderApiRuntimeOptions,\n): Promise<unknown[]> {\n const customConfigs = runtime.getCustomProviders\n ? await runtime.getCustomProviders()\n : [];\n\n if (provider) {\n // Check built-ins first\n if (isProviderApiId(provider)) {\n return listProviderApiCatalog(provider, options) as unknown[];\n }\n // Check custom\n const custom = customConfigs.find((c) => c.id === provider);\n if (custom) return [customProviderToCatalogEntry(custom)];\n const known = [\n ...normalizeProviderIds(options.providerIds),\n ...customConfigs.map((c) => c.id),\n ];\n throw new Error(\n `Unknown provider \"${provider}\". Known providers: ${known.join(\", \")}`,\n );\n }\n\n const builtInEntries = listProviderApiCatalog(\n undefined,\n options,\n ) as unknown[];\n const builtInIds = new Set(\n (options.providerIds ?? PROVIDER_API_IDS).map(String),\n );\n const customEntries = customConfigs\n .filter((c) => !builtInIds.has(c.id))\n .map(customProviderToCatalogEntry);\n return [...builtInEntries, ...customEntries];\n}\n\n/**\n * Look up a custom provider by id from the runtime loader.\n */\nasync function resolveCustomProvider(\n id: string,\n runtime: ProviderApiRuntimeOptions,\n): Promise<CustomProviderConfig | null> {\n if (!runtime.getCustomProviders) return null;\n const configs = await runtime.getCustomProviders();\n return configs.find((c) => c.id === id) ?? null;\n}\n\n/**\n * List all provider ids (built-in + custom) visible to this runtime.\n */\nasync function listAllProviderIds(\n runtime: ProviderApiRuntimeOptions,\n): Promise<string[]> {\n const builtIn = normalizeProviderIds(runtime.providerIds).map(String);\n if (!runtime.getCustomProviders) return builtIn;\n const custom = await runtime.getCustomProviders();\n return [...builtIn, ...custom.map((c) => c.id)];\n}\n\n/**\n * Assert that a provider is either a known built-in or a registered custom\n * provider. Throws with a descriptive message listing known providers.\n */\nasync function assertProviderAllowedAsync(\n provider: string,\n runtime: ProviderApiRuntimeOptions,\n): Promise<void> {\n // Built-in check (fast path)\n if (isProviderApiId(provider)) {\n // Still check the providerIds whitelist if set\n const allowed = normalizeProviderIds(runtime.providerIds);\n if (!allowed.includes(provider as ProviderApiId)) {\n throw new Error(`Provider API ${provider} is not enabled for this app.`);\n }\n return;\n }\n // Custom provider check\n const custom = await resolveCustomProvider(provider, runtime);\n if (custom) return;\n const known = await listAllProviderIds(runtime);\n throw new Error(\n `Unknown provider \"${provider}\". Known providers: ${known.join(\", \")}`,\n );\n}\n\nexport async function defaultProviderApiCredentialResolver(\n options: ProviderApiCredentialLookupOptions,\n): Promise<ProviderApiResolvedCredential | null> {\n if (options.workspaceProvider) {\n const result = await resolveWorkspaceConnectionCredentialForApp({\n appId: options.appId,\n provider: options.workspaceProvider,\n key: options.key,\n connectionId: options.connectionId,\n userEmail: options.ctx.userEmail,\n orgId: options.ctx.orgId,\n });\n if (result.available && result.value) {\n return {\n key: result.provenance?.resolvedKey ?? result.key,\n value: result.value,\n source: \"workspace_connection\",\n provider: result.provider,\n connectionId: result.provenance?.connectionId,\n connectionLabel: result.provenance?.connectionLabel,\n scope:\n typeof result.provenance?.secretScope === \"string\"\n ? result.provenance.secretScope\n : undefined,\n };\n }\n }\n\n const value = await resolveCredential(options.key, options.ctx);\n if (!value) return null;\n return {\n key: options.key,\n value,\n source: options.localCredentialSource,\n provider: options.provider,\n };\n}\n\nfunction normalizeProviderIds(\n providerIds?: readonly (ProviderApiId | string)[],\n): ProviderApiId[] {\n if (!providerIds) return [...PROVIDER_API_IDS];\n const result: ProviderApiId[] = [];\n const seen = new Set<string>();\n for (const providerId of providerIds) {\n if (!isProviderApiId(providerId)) {\n throw new Error(`Unsupported provider API: ${providerId}`);\n }\n if (seen.has(providerId)) continue;\n seen.add(providerId);\n result.push(providerId);\n }\n return result;\n}\n\nfunction assertProviderAllowed(\n provider: ProviderApiId | string,\n providerIds?: readonly (ProviderApiId | string)[],\n) {\n const allowed = normalizeProviderIds(providerIds);\n if (!allowed.includes(provider as ProviderApiId)) {\n throw new Error(`Provider API ${provider} is not enabled for this app.`);\n }\n}\n\nfunction describeAuth(auth: ProviderApiAuthKind): string {\n if (auth.type === \"none\") return \"none\";\n if (auth.type === \"bearer\") return \"bearer\";\n if (auth.type === \"basic\") return \"basic\";\n if (auth.type === \"basic-raw\") return \"basic\";\n if (auth.type === \"api-key-header\") return `api-key-header:${auth.header}`;\n if (auth.type === \"google-service-account\") return \"google-service-account\";\n if (auth.type === \"oauth-bearer\") return `oauth-bearer:${auth.oauthProvider}`;\n return \"prometheus-basic-or-bearer\";\n}\n\nfunction requireRuntimeCredentialContext(\n runtime: ProviderApiRuntimeOptions,\n credentialKey: string,\n): CredentialContext {\n const ctx = runtime.getCredentialContext?.() ?? getCredentialContext();\n if (!ctx) {\n throw new Error(\n `Cannot resolve credential \"${credentialKey}\" outside an authenticated request context.`,\n );\n }\n return ctx;\n}\n\nasync function resolveBaseUrl(\n config: ProviderApiConfig,\n runtime: ProviderApiRuntimeOptions,\n ctx: CredentialContext,\n args: ProviderApiRequestArgs,\n): Promise<string> {\n if (!config.baseUrlCredentialKey) return config.defaultBaseUrl;\n const configured = await resolveCredentialValue({\n config,\n runtime,\n ctx,\n key: config.baseUrlCredentialKey,\n args,\n });\n return (configured || config.defaultBaseUrl).replace(/\\/+$/, \"\");\n}\n\nasync function resolvePlaceholders(\n config: ProviderApiConfig,\n runtime: ProviderApiRuntimeOptions,\n ctx: CredentialContext,\n args: ProviderApiRequestArgs,\n): Promise<Record<string, string>> {\n const placeholders: Record<string, string> = {};\n for (const placeholder of config.placeholders ?? []) {\n const value = await resolveCredentialValue({\n config,\n runtime,\n ctx,\n key: placeholder.credentialKey,\n args,\n });\n if (value) placeholders[placeholder.name] = value;\n }\n return placeholders;\n}\n\nasync function resolveCredentialValue(options: {\n config: ProviderApiConfig;\n runtime: ProviderApiRuntimeOptions;\n ctx: CredentialContext;\n key: string;\n args: ProviderApiRequestArgs;\n workspaceProvider?: string;\n}): Promise<string | undefined> {\n const credential = await resolveOptionalCredential({\n provider: options.config.id,\n workspaceProvider: options.workspaceProvider,\n key: options.key,\n ctx: options.ctx,\n runtime: options.runtime,\n connectionId: options.args.connectionId,\n });\n return credential?.value;\n}\n\nfunction substituteString(\n value: string,\n placeholders: Record<string, string>,\n): string {\n let result = value;\n for (const [name, replacement] of Object.entries(placeholders)) {\n result = result.split(`{${name}}`).join(replacement);\n }\n return result;\n}\n\nfunction substituteUnknown(\n value: unknown,\n placeholders: Record<string, string>,\n): unknown {\n if (typeof value === \"string\") return substituteString(value, placeholders);\n if (Array.isArray(value)) {\n return value.map((item) => substituteUnknown(item, placeholders));\n }\n if (value && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [\n key,\n substituteUnknown(entry, placeholders),\n ]),\n );\n }\n return value;\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction buildProviderUrl(options: {\n config: ProviderApiConfig;\n baseUrl: string;\n rawPath: string;\n query: unknown;\n}): URL {\n const base = new URL(options.baseUrl);\n const rawPath = options.rawPath.trim();\n const url = /^https?:\\/\\//i.test(rawPath)\n ? new URL(rawPath)\n : new URL(joinProviderUrlPath(base, rawPath), base.origin);\n\n if (!isAllowedProviderUrl(url, base, options.config)) {\n throw new Error(\n `${options.config.label} API requests must stay on the configured provider host or registered provider host suffix.`,\n );\n }\n\n for (const [key, value] of queryEntries(options.query)) {\n url.searchParams.append(key, value);\n }\n\n return url;\n}\n\nfunction joinProviderUrlPath(base: URL, rawPath: string): string {\n const basePath = base.pathname.replace(/\\/+$/, \"\");\n const providerPath = rawPath.replace(/^\\/+/, \"\");\n if (!providerPath) return basePath || \"/\";\n const baseSegments = basePath.split(\"/\").filter(Boolean);\n const providerSegments = providerPath.split(\"/\").filter(Boolean);\n if (\n baseSegments.length > 0 &&\n providerSegments.length >= baseSegments.length &&\n baseSegments.every((segment, index) => segment === providerSegments[index])\n ) {\n return `/${providerPath}`;\n }\n return `${basePath}/${providerPath}`;\n}\n\nfunction isAllowedProviderUrl(\n url: URL,\n base: URL,\n config: ProviderApiConfig,\n): boolean {\n if (url.protocol !== \"https:\" && url.protocol !== \"http:\") return false;\n if (url.origin === base.origin) return true;\n const host = url.hostname.toLowerCase();\n return (config.allowedHostSuffixes ?? []).some((suffix) => {\n const normalized = suffix.toLowerCase().replace(/^\\./, \"\");\n return host === normalized || host.endsWith(`.${normalized}`);\n });\n}\n\nfunction queryEntries(value: unknown): Array<[string, string]> {\n if (!value) return [];\n if (typeof value === \"string\") {\n const params = new URLSearchParams(value.replace(/^\\?/, \"\"));\n return Array.from(params.entries());\n }\n if (typeof value !== \"object\" || Array.isArray(value)) return [];\n const entries: Array<[string, string]> = [];\n for (const [key, raw] of Object.entries(value)) {\n if (raw === undefined || raw === null) continue;\n if (Array.isArray(raw)) {\n for (const item of raw) entries.push([key, String(item)]);\n } else {\n entries.push([key, String(raw)]);\n }\n }\n return entries;\n}\n\nasync function resolveAuth(\n config: ProviderApiConfig,\n runtime: ProviderApiRuntimeOptions,\n ctx: CredentialContext,\n args: ProviderApiRequestArgs,\n): Promise<ResolvedAuth> {\n const auth = config.auth;\n if (auth.type === \"none\") return emptyAuth();\n if (auth.type === \"bearer\") {\n const credential = await resolveAnyCredential({\n provider: config.id,\n workspaceProvider: auth.workspaceProvider,\n keys: auth.keys,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n return {\n headers: { Authorization: `Bearer ${credential.value}` },\n credentialSources: [omitCredentialValue(credential)],\n secretValues: [credential.value],\n };\n }\n if (auth.type === \"basic\") {\n const username = await resolveRequiredCredential({\n provider: config.id,\n workspaceProvider: auth.workspaceProvider,\n key: auth.usernameKey,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n const password =\n auth.passwordKey === auth.usernameKey\n ? username\n : await resolveRequiredCredential({\n provider: config.id,\n workspaceProvider: auth.workspaceProvider,\n key: auth.passwordKey,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n const encoded = Buffer.from(`${username.value}:${password.value}`).toString(\n \"base64\",\n );\n return {\n headers: { Authorization: `Basic ${encoded}` },\n credentialSources: [\n omitCredentialValue(username),\n ...(password.key === username.key\n ? []\n : [omitCredentialValue(password)]),\n ],\n secretValues: [username.value, password.value, encoded],\n };\n }\n if (auth.type === \"basic-raw\") {\n const credential = await resolveRequiredCredential({\n provider: config.id,\n workspaceProvider: auth.workspaceProvider,\n key: auth.key,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n const encoded = Buffer.from(credential.value).toString(\"base64\");\n return {\n headers: { Authorization: `Basic ${encoded}` },\n credentialSources: [omitCredentialValue(credential)],\n secretValues: [credential.value, encoded],\n };\n }\n if (auth.type === \"api-key-header\") {\n const credential = await resolveRequiredCredential({\n provider: config.id,\n workspaceProvider: auth.workspaceProvider,\n key: auth.key,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n return {\n headers: { [auth.header]: credential.value },\n credentialSources: [omitCredentialValue(credential)],\n secretValues: [credential.value],\n };\n }\n if (auth.type === \"google-service-account\") {\n const token = await getGoogleServiceAccountToken(auth.scopes, runtime, ctx);\n return {\n headers: { Authorization: `Bearer ${token}` },\n credentialSources: [\n {\n key: \"GOOGLE_APPLICATION_CREDENTIALS_JSON\",\n provider: config.id,\n source: runtime.localCredentialSource ?? \"app_local\",\n },\n ],\n secretValues: [token],\n };\n }\n if (auth.type === \"oauth-bearer\") {\n const oauthProvider =\n runtime.oauthProviderOverrides?.[config.id] ?? auth.oauthProvider;\n const credential = await resolveOAuthBearerToken({\n auth: { ...auth, oauthProvider },\n ctx,\n accountId: args.accountId,\n });\n return {\n headers: { Authorization: `Bearer ${credential.value}` },\n credentialSources: [omitCredentialValue(credential)],\n secretValues: [credential.value],\n };\n }\n\n const bearer = await resolveCredentialValue({\n config,\n runtime,\n ctx,\n key: \"PROMETHEUS_BEARER_TOKEN\",\n args,\n });\n if (bearer) {\n return {\n headers: { Authorization: `Bearer ${bearer}` },\n credentialSources: [\n {\n key: \"PROMETHEUS_BEARER_TOKEN\",\n provider: config.id,\n source: runtime.localCredentialSource ?? \"app_local\",\n },\n ],\n secretValues: [bearer],\n };\n }\n const username = await resolveCredentialValue({\n config,\n runtime,\n ctx,\n key: \"PROMETHEUS_USERNAME\",\n args,\n });\n const password = await resolveCredentialValue({\n config,\n runtime,\n ctx,\n key: \"PROMETHEUS_PASSWORD\",\n args,\n });\n if (username && password) {\n const encoded = Buffer.from(`${username}:${password}`).toString(\"base64\");\n return {\n headers: { Authorization: `Basic ${encoded}` },\n credentialSources: [\n {\n key: \"PROMETHEUS_USERNAME\",\n provider: config.id,\n source: runtime.localCredentialSource ?? \"app_local\",\n },\n {\n key: \"PROMETHEUS_PASSWORD\",\n provider: config.id,\n source: runtime.localCredentialSource ?? \"app_local\",\n },\n ],\n secretValues: [username, password, encoded],\n };\n }\n return emptyAuth();\n}\n\nfunction emptyAuth(): ResolvedAuth {\n return { headers: {}, credentialSources: [], secretValues: [] };\n}\n\nasync function resolveAnyCredential(options: {\n provider: ProviderApiId;\n workspaceProvider: string | undefined;\n keys: readonly string[];\n ctx: CredentialContext;\n runtime: ProviderApiRuntimeOptions;\n connectionId?: string | null;\n}): Promise<ProviderApiResolvedCredential> {\n for (const key of options.keys) {\n const credential = await resolveOptionalCredential({ ...options, key });\n if (credential?.value) return credential;\n }\n throw new Error(\n `${options.provider} credential not configured. Tried: ${options.keys.join(\n \", \",\n )}`,\n );\n}\n\nasync function resolveRequiredCredential(options: {\n provider: ProviderApiId;\n workspaceProvider: string | undefined;\n key: string;\n ctx: CredentialContext;\n runtime: ProviderApiRuntimeOptions;\n connectionId?: string | null;\n}): Promise<ProviderApiResolvedCredential> {\n const credential = await resolveOptionalCredential(options);\n if (!credential?.value) throw new Error(`${options.key} not configured`);\n return credential;\n}\n\nasync function resolveOptionalCredential(options: {\n provider: ProviderApiId;\n workspaceProvider: string | undefined;\n key: string;\n ctx: CredentialContext;\n runtime: ProviderApiRuntimeOptions;\n connectionId?: string | null;\n}): Promise<ProviderApiResolvedCredential | null> {\n const localCredentialSource =\n options.runtime.localCredentialSource ?? \"app_local\";\n const lookup: ProviderApiCredentialLookupOptions = {\n appId: options.runtime.appId,\n provider: options.provider,\n key: options.key,\n ctx: options.ctx,\n workspaceProvider: options.workspaceProvider,\n connectionId: options.connectionId,\n localCredentialSource,\n };\n if (options.runtime.resolveCredential) {\n return options.runtime.resolveCredential(lookup);\n }\n return defaultProviderApiCredentialResolver(lookup);\n}\n\nfunction omitCredentialValue(\n credential: ProviderApiResolvedCredential,\n): Omit<ProviderApiResolvedCredential, \"value\"> {\n const { value: _value, ...rest } = credential;\n return rest;\n}\n\nconst googleServiceTokenCache = new Map<\n string,\n { token: string; expiresAt: number }\n>();\n\nasync function getGoogleServiceAccountToken(\n scopes: readonly string[],\n runtime: ProviderApiRuntimeOptions,\n ctx: CredentialContext,\n): Promise<string> {\n const cacheKey = createHash(\"sha256\")\n .update(\n `${runtime.appId}:${ctx.orgId ?? ctx.userEmail}:${scopes.join(\" \")}`,\n )\n .digest(\"hex\");\n const cached = googleServiceTokenCache.get(cacheKey);\n if (cached && Date.now() < cached.expiresAt - 30_000) return cached.token;\n\n const credsJson = await resolveCredentialValue({\n config: getProviderApiConfig(\"gcloud\"),\n runtime,\n ctx,\n key: \"GOOGLE_APPLICATION_CREDENTIALS_JSON\",\n args: { provider: \"gcloud\", path: \"/\" },\n });\n if (!credsJson) {\n throw new Error(\"GOOGLE_APPLICATION_CREDENTIALS_JSON not configured\");\n }\n let creds: {\n type?: string;\n client_email?: string;\n private_key?: string;\n token_uri?: string;\n };\n try {\n creds = JSON.parse(credsJson) as typeof creds;\n } catch {\n throw new Error(\n \"GOOGLE_APPLICATION_CREDENTIALS_JSON is not valid JSON. Upload a service account JSON key.\",\n );\n }\n if (!creds.client_email || !creds.private_key) {\n throw new Error(\n \"GOOGLE_APPLICATION_CREDENTIALS_JSON must be a service account JSON key.\",\n );\n }\n\n const now = Math.floor(Date.now() / 1000);\n const aud = creds.token_uri || \"https://oauth2.googleapis.com/token\";\n const jwt = await signRs256Jwt(\n {\n iss: creds.client_email,\n scope: scopes.join(\" \"),\n aud,\n iat: now,\n exp: now + 3600,\n },\n creds.private_key,\n );\n const res = await fetch(aud, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams({\n grant_type: \"urn:ietf:params:oauth:grant-type:jwt-bearer\",\n assertion: jwt,\n }),\n });\n if (!res.ok) {\n throw new Error(`Google OAuth error ${res.status}: ${await res.text()}`);\n }\n const data = (await res.json()) as {\n access_token: string;\n expires_in?: number;\n };\n googleServiceTokenCache.set(cacheKey, {\n token: data.access_token,\n expiresAt: Date.now() + (data.expires_in ?? 3600) * 1000,\n });\n return data.access_token;\n}\n\nasync function resolveOAuthBearerToken(options: {\n auth: Extract<ProviderApiAuthKind, { type: \"oauth-bearer\" }>;\n ctx: CredentialContext;\n accountId?: string | null;\n}): Promise<ProviderApiResolvedCredential> {\n const accounts = await listOAuthAccountsByOwner(\n options.auth.oauthProvider,\n options.ctx.userEmail,\n );\n if (accounts.length === 0) {\n throw new Error(\n `${options.auth.tokenLabel} is not connected for ${options.ctx.userEmail}.`,\n );\n }\n const accountId = options.accountId?.trim();\n const account = accountId\n ? accounts.find((entry) => entry.accountId === accountId)\n : accounts[0];\n if (!account) {\n throw new Error(\n `${options.auth.tokenLabel} account ${accountId} is not available to ${options.ctx.userEmail}.`,\n );\n }\n const tokens = account.tokens as OAuthTokens;\n const token = await getValidOAuthAccessToken({\n oauthProvider: options.auth.oauthProvider,\n accountId: account.accountId,\n ownerEmail: options.ctx.userEmail,\n tokens,\n });\n return {\n key: `${options.auth.oauthProvider.toUpperCase()}_OAUTH_TOKEN`,\n value: token,\n source: \"oauth_token\",\n provider: options.auth.oauthProvider,\n accountId: account.accountId,\n accountLabel: account.displayName,\n };\n}\n\nasync function getValidOAuthAccessToken(options: {\n oauthProvider: string;\n accountId: string;\n ownerEmail: string;\n tokens: OAuthTokens;\n}): Promise<string> {\n const accessToken =\n options.tokens.access_token ?? options.tokens.accessToken ?? \"\";\n if (!accessToken) {\n throw new Error(\n `${options.oauthProvider} OAuth account has no access token.`,\n );\n }\n const expiresAt = options.tokens.expiry_date ?? options.tokens.expiresAt;\n if (\n !expiresAt ||\n !Number.isFinite(expiresAt) ||\n expiresAt > Date.now() + 60_000\n ) {\n return accessToken;\n }\n\n const refreshToken =\n options.tokens.refresh_token ?? options.tokens.refreshToken;\n if (!refreshToken) return accessToken;\n if (\n options.oauthProvider === \"google\" ||\n options.oauthProvider === \"google-docs\"\n ) {\n return refreshGoogleOAuthToken(options, refreshToken);\n }\n throw new Error(\n `${options.oauthProvider} OAuth token is expired and automatic refresh is not configured for provider-api.`,\n );\n}\n\nasync function refreshGoogleOAuthToken(\n options: {\n oauthProvider: string;\n accountId: string;\n ownerEmail: string;\n tokens: OAuthTokens;\n },\n refreshToken: string,\n): Promise<string> {\n const clientId = process.env.GOOGLE_CLIENT_ID;\n const clientSecret = process.env.GOOGLE_CLIENT_SECRET;\n if (!clientId || !clientSecret) {\n throw new Error(\n \"GOOGLE_CLIENT_ID/SECRET not set for Google OAuth refresh.\",\n );\n }\n const res = await fetch(\"https://oauth2.googleapis.com/token\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams({\n refresh_token: refreshToken,\n client_id: clientId,\n client_secret: clientSecret,\n grant_type: \"refresh_token\",\n }),\n });\n const data = (await res.json()) as {\n access_token?: string;\n expires_in?: number;\n token_type?: string;\n scope?: string;\n error?: string;\n error_description?: string;\n };\n if (!res.ok || !data.access_token) {\n if (data.error && PERMANENT_GOOGLE_OAUTH_REFRESH_ERRORS.has(data.error)) {\n await deleteOAuthTokens(options.oauthProvider, options.accountId);\n }\n const detail = data.error_description ?? data.error ?? res.statusText;\n throw new Error(`Google OAuth refresh failed: ${detail}`);\n }\n const merged: OAuthTokens = {\n ...options.tokens,\n access_token: data.access_token,\n expiry_date: Date.now() + (data.expires_in ?? 3600) * 1000,\n token_type: data.token_type ?? options.tokens.token_type,\n scope: data.scope ?? options.tokens.scope,\n };\n await saveOAuthTokens(\n options.oauthProvider,\n options.accountId,\n merged as unknown as Record<string, unknown>,\n options.ownerEmail,\n );\n return data.access_token;\n}\n\nfunction normalizeMethod(\n method: ProviderApiMethod | undefined,\n): ProviderApiMethod {\n const normalized = String(method || \"GET\").toUpperCase();\n if (\n normalized === \"GET\" ||\n normalized === \"POST\" ||\n normalized === \"PUT\" ||\n normalized === \"PATCH\" ||\n normalized === \"DELETE\" ||\n normalized === \"HEAD\"\n ) {\n return normalized;\n }\n throw new Error(`Unsupported HTTP method: ${method}`);\n}\n\nfunction sanitizeOutboundHeaders(value: unknown): Record<string, string> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return {};\n const headers: Record<string, string> = {};\n for (const [name, rawValue] of Object.entries(value)) {\n const lower = name.toLowerCase();\n if (!HEADER_NAME_RE.test(name) || BLOCKED_OUTBOUND_HEADERS.has(lower)) {\n continue;\n }\n if (rawValue === undefined || rawValue === null) continue;\n const headerValue = String(rawValue);\n if (/[\\r\\n]/.test(headerValue)) continue;\n headers[name] = headerValue;\n }\n return headers;\n}\n\nfunction prepareBody(\n body: unknown,\n headers: Record<string, string>,\n): BodyInit | undefined {\n if (body === undefined || body === null) return undefined;\n if (typeof body === \"string\") return body;\n const hasContentType = Object.keys(headers).some(\n (name) => name.toLowerCase() === \"content-type\",\n );\n if (!hasContentType) headers[\"Content-Type\"] = \"application/json\";\n return JSON.stringify(body);\n}\n\nfunction runtimeOptionsAppId(runtime: ProviderApiRuntimeOptions): string {\n return runtime.appId || \"app\";\n}\n\nasync function fetchWithTimeout(\n optionsUrl: string,\n options: {\n method?: ProviderApiMethod;\n headers?: Record<string, string>;\n body?: BodyInit;\n timeoutMs?: number;\n maxBytes?: number;\n secretValues?: string[];\n quota?: ProviderApiFetchQuotaOptions;\n },\n): Promise<ProviderApiHttpResponse> {\n const runOnce = async (): Promise<ProviderApiHttpResponse> => {\n const controller = new AbortController();\n const timeoutMs = clampTimeout(options.timeoutMs);\n const timeout = setTimeout(() => controller.abort(), timeoutMs);\n const method = options.method ?? \"GET\";\n const secretValues = options.secretValues ?? [];\n try {\n const dispatcher = (await createSsrfSafeDispatcher()) ?? undefined;\n const fetchOptions: RequestInit & { dispatcher?: unknown } = {\n method,\n headers: options.headers,\n body: options.body,\n signal: controller.signal,\n redirect: \"manual\",\n };\n if (dispatcher) fetchOptions.dispatcher = dispatcher;\n try {\n return await fetchProviderResponse(optionsUrl, fetchOptions, {\n maxBytes: options.maxBytes,\n secretValues,\n });\n } catch (error) {\n if (dispatcher && isDispatcherCompatibilityError(error)) {\n const fallbackOptions = { ...fetchOptions };\n delete fallbackOptions.dispatcher;\n return await fetchProviderResponse(optionsUrl, fallbackOptions, {\n maxBytes: options.maxBytes,\n secretValues,\n });\n }\n throw error;\n }\n } catch (error) {\n throw normalizeFetchError(error, {\n method,\n url: optionsUrl,\n timeoutMs,\n secretValues,\n });\n } finally {\n clearTimeout(timeout);\n }\n };\n\n if (options.quota) {\n return executeWithProviderQuota({\n request: {\n identity: options.quota.identity,\n method: options.quota.method,\n target: options.quota.target,\n requestKey: options.quota.requestKey,\n },\n execute: runOnce,\n inspect: (result) => ({\n status: result.status,\n headers: result.headers,\n }),\n buildQuotaExhaustedResult: providerQuotaExhaustedResponse,\n });\n }\n\n return runOnce();\n}\n\nfunction providerQuotaExhaustedResponse(\n detail: ProviderQuotaExhaustedDetail,\n): ProviderApiHttpResponse {\n const retryAfterSeconds = Math.max(0, Math.ceil(detail.retryAfterMs / 1000));\n return {\n status: 429,\n statusText: \"Provider quota cooldown\",\n ok: false,\n elapsedMs: 0,\n headers: {\n \"retry-after\": String(retryAfterSeconds),\n \"x-agent-native-provider-quota\": \"exhausted\",\n },\n contentType: \"application/json\",\n size: 0,\n truncated: false,\n json: {\n error: \"provider_quota_exhausted\",\n provider: detail.providerId,\n message:\n `Provider API quota is cooling down for ${detail.providerId}. ` +\n `Retry after ${detail.retryAt}.`,\n retryAt: detail.retryAt,\n retryAfterMs: detail.retryAfterMs,\n reason: detail.reason,\n method: detail.method,\n target: detail.target,\n },\n quota: {\n exhausted: true,\n providerId: detail.providerId,\n retryAfterMs: detail.retryAfterMs,\n retryAt: detail.retryAt,\n reason: detail.reason,\n },\n };\n}\n\nasync function fetchProviderResponse(\n url: string,\n fetchOptions: RequestInit & { dispatcher?: unknown },\n options: {\n maxBytes?: number;\n secretValues: string[];\n },\n): Promise<ProviderApiHttpResponse> {\n const startedAt = Date.now();\n const res = await fetch(url, fetchOptions);\n const elapsedMs = Date.now() - startedAt;\n const rawText = await readResponseTextWithLimit(\n res,\n clampMaxBytes(options.maxBytes),\n );\n const redactedText = redactString(rawText.text, options.secretValues);\n const parsed = tryParseJson(redactedText);\n return {\n status: res.status,\n statusText: res.statusText,\n ok: res.ok,\n elapsedMs,\n headers: redactSecrets(headersToObject(res.headers), options.secretValues),\n contentType: res.headers.get(\"content-type\") ?? null,\n size: rawText.size,\n truncated: rawText.truncated,\n text: parsed === undefined ? redactedText : undefined,\n json: parsed,\n };\n}\n\nfunction isDispatcherCompatibilityError(error: unknown): boolean {\n const err = error as {\n message?: unknown;\n cause?: { code?: unknown; message?: unknown };\n };\n const code = typeof err?.cause?.code === \"string\" ? err.cause.code : \"\";\n const detail = [\n typeof err?.message === \"string\" ? err.message : \"\",\n typeof err?.cause?.message === \"string\" ? err.cause.message : \"\",\n ]\n .join(\" \")\n .toLowerCase();\n return (\n code === \"UND_ERR_INVALID_ARG\" &&\n detail.includes(\"invalid onrequeststart method\")\n );\n}\n\nfunction normalizeFetchError(\n error: unknown,\n options: {\n method: ProviderApiMethod;\n url: string;\n timeoutMs: number;\n secretValues: string[];\n },\n): Error {\n const target = describeProviderRequestTarget(\n options.url,\n options.secretValues,\n );\n const err = error as {\n name?: unknown;\n message?: unknown;\n cause?: { code?: unknown; message?: unknown };\n };\n if (err?.name === \"AbortError\") {\n return new Error(\n `Provider API request timed out after ${options.timeoutMs}ms: ${options.method} ${target}`,\n { cause: error },\n );\n }\n\n const causeCode =\n typeof err?.cause?.code === \"string\" && err.cause.code\n ? ` (${err.cause.code})`\n : \"\";\n const detail =\n typeof err?.cause?.message === \"string\" && err.cause.message\n ? err.cause.message\n : typeof err?.message === \"string\" && err.message\n ? err.message\n : String(error);\n return new Error(\n `Provider API request failed${causeCode}: ${options.method} ${target}: ${redactString(detail, options.secretValues)}`,\n { cause: error },\n );\n}\n\nfunction describeProviderRequestTarget(\n rawUrl: string,\n secretValues: string[],\n): string {\n try {\n const url = new URL(rawUrl);\n return redactString(\n `${url.host}${url.pathname}${url.search}`,\n secretValues,\n );\n } catch {\n return redactString(rawUrl, secretValues);\n }\n}\n\nasync function readResponseTextWithLimit(\n response: Response,\n maxBytes: number,\n): Promise<{ text: string; truncated: boolean; size: number }> {\n const contentLength = response.headers.get(\"content-length\");\n if (contentLength && Number(contentLength) > maxBytes) {\n return {\n text: `(response too large - ${contentLength} bytes, max ${maxBytes})`,\n truncated: true,\n size: Number(contentLength),\n };\n }\n const buffer = await response.arrayBuffer();\n const size = buffer.byteLength;\n const bytes = new Uint8Array(buffer.slice(0, maxBytes));\n return {\n text: new TextDecoder().decode(bytes),\n truncated: size > maxBytes,\n size,\n };\n}\n\nfunction headersToObject(headers: Headers): Record<string, string> {\n const result: Record<string, string> = {};\n headers.forEach((value, key) => {\n if (key.toLowerCase() !== \"set-cookie\") result[key] = value;\n });\n return result;\n}\n\nfunction tryParseJson(text: string): unknown | undefined {\n const trimmed = text.trim();\n if (!trimmed || !/^[{[]/.test(trimmed)) return undefined;\n try {\n return JSON.parse(trimmed);\n } catch {\n return undefined;\n }\n}\n\nfunction redactSecrets<T>(value: T, secretValues: string[]): T {\n if (secretValues.length === 0) return value;\n if (typeof value === \"string\") return redactString(value, secretValues) as T;\n if (Array.isArray(value)) {\n return value.map((item) => redactSecrets(item, secretValues)) as T;\n }\n if (value && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [\n key,\n redactSecrets(entry, secretValues),\n ]),\n ) as T;\n }\n return value;\n}\n\nfunction redactString(text: string, secretValues: string[]): string {\n let output = text;\n for (const secret of [...secretValues].sort((a, b) => b.length - a.length)) {\n if (!secret) continue;\n output = output.split(secret).join(\"[redacted]\");\n try {\n output = output.split(encodeURIComponent(secret)).join(\"[redacted]\");\n } catch {}\n }\n return output;\n}\n\nfunction mergeQueryObjects(\n base: unknown,\n extra: Record<string, string>,\n): unknown {\n if (!base) return extra;\n if (typeof base === \"string\") {\n const params = new URLSearchParams(base.replace(/^\\?/, \"\"));\n for (const [key, value] of Object.entries(extra)) {\n params.set(key, value);\n }\n return params.toString();\n }\n if (typeof base === \"object\" && !Array.isArray(base)) {\n return { ...(base as Record<string, unknown>), ...extra };\n }\n return extra;\n}\n\nfunction setValueAtPath(base: unknown, path: string, value: unknown): unknown {\n const root =\n base && typeof base === \"object\" && !Array.isArray(base)\n ? { ...(base as Record<string, unknown>) }\n : {};\n const parts = path.split(\".\").filter(Boolean);\n if (!parts.length) return root;\n\n let current: Record<string, unknown> = root;\n for (const part of parts.slice(0, -1)) {\n const existing = current[part];\n const next =\n existing && typeof existing === \"object\" && !Array.isArray(existing)\n ? { ...(existing as Record<string, unknown>) }\n : {};\n current[part] = next;\n current = next;\n }\n current[parts[parts.length - 1]!] = value;\n return root;\n}\n\nfunction clampTimeout(timeoutMs: number | undefined): number {\n if (!Number.isFinite(timeoutMs)) return DEFAULT_TIMEOUT_MS;\n return Math.max(1_000, Math.min(MAX_TIMEOUT_MS, Math.floor(timeoutMs!)));\n}\n\nfunction clampMaxBytes(maxBytes: number | undefined): number {\n if (!Number.isFinite(maxBytes)) return DEFAULT_MAX_BYTES;\n return Math.max(1_000, Math.min(MAX_MAX_BYTES, Math.floor(maxBytes!)));\n}\n\n/** Resolve a dot-path from a parsed JSON object, e.g. \"meta.next_cursor\". */\nfunction dotGet(obj: unknown, path: string): unknown {\n if (!path) return obj;\n let current: unknown = obj;\n for (const key of path.split(\".\")) {\n if (current === null || typeof current !== \"object\") return undefined;\n current = (current as Record<string, unknown>)[key];\n }\n return current;\n}\n\n/**\n * Handle saveToFile: write the full provider-api response body to a workspace\n * file and return a compact summary.\n */\nasync function handleSaveToFile(\n filePath: string,\n responseText: string,\n contentType: string | null,\n status: number,\n): Promise<unknown> {\n const { writeWorkspaceFile, SAVE_TO_FILE_MAX_BYTES: maxSaveBytes } =\n await import(\"../workspace-files/store.js\");\n const { getRequestOrgId, getRequestUserEmail } =\n await import(\"../server/request-context.js\");\n\n const orgId = getRequestOrgId();\n const email = getRequestUserEmail();\n const scope = orgId\n ? { scope: \"org\" as const, scopeId: orgId }\n : email\n ? { scope: \"user\" as const, scopeId: email }\n : null;\n\n if (!scope) {\n throw new Error(\n \"saveToFile requires an authenticated request context (no user email or orgId found).\",\n );\n }\n\n const mimeType = contentType?.split(\";\")[0].trim() ?? \"text/plain\";\n await writeWorkspaceFile(scope, filePath, responseText, mimeType, {\n maxFileBytes: maxSaveBytes,\n });\n const bytes = Buffer.byteLength(responseText, \"utf8\");\n const preview = responseText.slice(0, 2000);\n return {\n savedToFile: true,\n savedTo: filePath,\n status,\n bytes,\n contentType: mimeType,\n preview: preview.length < responseText.length ? `${preview}…` : preview,\n };\n}\n\n/**\n * Execute paginated requests, accumulating items across pages.\n * Returns the accumulated items array and the last response for metadata.\n */\nasync function fetchAllPages(\n config: FetchAllPagesConfig,\n executeOnePage: (extra?: {\n query?: Record<string, string>;\n bodyCursor?: { path: string; value: string };\n }) => Promise<{\n text: string;\n contentType: string | null;\n status: number;\n ok: boolean;\n }>,\n): Promise<{\n items: unknown[];\n pageCount: number;\n lastStatus: number;\n lastContentType: string | null;\n}> {\n const maxPages = Math.min(\n Number.isFinite(config.maxPages) && config.maxPages! > 0\n ? config.maxPages!\n : 10,\n FETCH_ALL_PAGES_MAX,\n );\n\n const items: unknown[] = [];\n let cursor: string | undefined;\n let pageCount = 0;\n let lastStatus = 0;\n let lastContentType: string | null = null;\n\n if (!config.cursorParam && !config.cursorBodyPath) {\n throw new Error(\n \"fetchAllPages requires cursorParam or cursorBodyPath to send the next cursor.\",\n );\n }\n if (config.cursorParam && config.cursorBodyPath) {\n throw new Error(\n \"fetchAllPages accepts exactly one cursor method: cursorParam or cursorBodyPath.\",\n );\n }\n\n while (pageCount < maxPages) {\n const extra: {\n query?: Record<string, string>;\n bodyCursor?: { path: string; value: string };\n } = {};\n if (cursor) {\n if (config.cursorParam) extra.query = { [config.cursorParam]: cursor };\n if (config.cursorBodyPath) {\n extra.bodyCursor = { path: config.cursorBodyPath, value: cursor };\n }\n }\n\n const page = await executeOnePage(pageCount > 0 ? extra : undefined);\n lastStatus = page.status;\n lastContentType = page.contentType;\n pageCount++;\n\n if (!page.ok) {\n const preview = page.text.replace(/\\s+/g, \" \").trim().slice(0, 500);\n throw new Error(\n `fetchAllPages request failed with HTTP ${page.status}${\n preview ? `: ${preview}` : \"\"\n }`,\n );\n }\n\n let body: unknown;\n try {\n body = JSON.parse(page.text);\n } catch {\n body = page.text;\n }\n\n // Extract items\n if (config.itemsPath) {\n const extracted = dotGet(body, config.itemsPath);\n if (Array.isArray(extracted)) {\n items.push(...extracted);\n } else if (extracted !== undefined) {\n items.push(extracted);\n }\n } else {\n items.push(body);\n }\n\n // Extract next cursor\n const nextCursor = dotGet(body, config.cursorPath);\n if (\n !nextCursor ||\n nextCursor === \"\" ||\n nextCursor === null ||\n nextCursor === cursor\n ) {\n break;\n }\n cursor = String(nextCursor);\n }\n\n return { items, pageCount, lastStatus, lastContentType };\n}\n\nfunction fingerprint(value: string): string {\n return createHash(\"sha256\").update(value).digest(\"hex\").slice(0, 12);\n}\n\nfunction base64UrlEncode(bytes: Uint8Array): string {\n let binary = \"\";\n for (let i = 0; i < bytes.length; i += 1) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary)\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/, \"\");\n}\n\nfunction base64UrlEncodeString(value: string): string {\n return base64UrlEncode(new TextEncoder().encode(value));\n}\n\nfunction pemToPkcs8(pem: string): Uint8Array {\n const body = pem\n .replace(/-----BEGIN [^-]+-----/g, \"\")\n .replace(/-----END [^-]+-----/g, \"\")\n .replace(/\\s+/g, \"\");\n const binary = atob(body);\n const out = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i += 1) {\n out[i] = binary.charCodeAt(i);\n }\n return out;\n}\n\nconst keyCache = new Map<string, Promise<CryptoKey>>();\n\nasync function privateKeyCacheKey(privateKeyPem: string): Promise<string> {\n const digest = await crypto.subtle.digest(\n \"SHA-256\",\n new TextEncoder().encode(privateKeyPem) as BufferSource,\n );\n return `sha256:${base64UrlEncode(new Uint8Array(digest))}`;\n}\n\nasync function importRs256Key(privateKeyPem: string): Promise<CryptoKey> {\n const cacheKey = await privateKeyCacheKey(privateKeyPem);\n let cached = keyCache.get(cacheKey);\n if (!cached) {\n cached = crypto.subtle.importKey(\n \"pkcs8\",\n pemToPkcs8(privateKeyPem) as BufferSource,\n { name: \"RSASSA-PKCS1-v1_5\", hash: \"SHA-256\" },\n false,\n [\"sign\"],\n );\n keyCache.set(cacheKey, cached);\n }\n return cached;\n}\n\nasync function signRs256Jwt(\n payload: Record<string, unknown>,\n privateKeyPem: string,\n): Promise<string> {\n const header = { alg: \"RS256\", typ: \"JWT\" };\n const signingInput = `${base64UrlEncodeString(\n JSON.stringify(header),\n )}.${base64UrlEncodeString(JSON.stringify(payload))}`;\n\n const key = await importRs256Key(privateKeyPem);\n const signature = await crypto.subtle.sign(\n \"RSASSA-PKCS1-v1_5\",\n key,\n new TextEncoder().encode(signingInput) as BufferSource,\n );\n\n return `${signingInput}.${base64UrlEncode(new Uint8Array(signature))}`;\n}\n"]}
|