@kontext-dev/js-sdk 0.3.0 → 1.0.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/errors.ts","../../src/management/auth.ts","../../src/management/http.ts","../../src/management/service-accounts.ts","../../src/management/applications.ts","../../src/management/integrations.ts","../../src/management/agent-sessions.ts","../../src/management/traces.ts","../../src/management/client.ts","../../src/management/types.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Typed error classes for the Kontext SDK.\n *\n * Every error has a `kontext_` prefixed code, an auto-generated docsUrl,\n * and a `kontextError` brand for type narrowing without instanceof.\n *\n * @packageDocumentation\n */\n\n// ============================================================================\n// Base\n// ============================================================================\n\n/**\n * Base error class for all Kontext SDK errors.\n *\n * @example\n * ```typescript\n * import { isKontextError } from '@kontext-dev/js-sdk';\n *\n * try {\n * await client.connect();\n * } catch (err) {\n * if (isKontextError(err)) {\n * console.log(err.code); // \"kontext_authorization_required\"\n * console.log(err.docsUrl); // \"https://docs.kontext.dev/errors/kontext_authorization_required\"\n * }\n * }\n * ```\n */\nexport class KontextError extends Error {\n /** Brand field for type narrowing without instanceof */\n readonly kontextError = true as const;\n\n /** Machine-readable error code, always prefixed with `kontext_` */\n readonly code: string;\n\n /** HTTP status code when applicable */\n readonly statusCode?: number;\n\n /** Auto-generated link to error documentation */\n readonly docsUrl: string;\n\n /** Server request ID for debugging / support escalation */\n readonly requestId?: string;\n\n /** Contextual metadata bag (integration IDs, param names, etc.) */\n readonly meta: Record<string, unknown>;\n\n constructor(\n message: string,\n code: string,\n options?: {\n statusCode?: number;\n requestId?: string;\n meta?: Record<string, unknown>;\n cause?: unknown;\n },\n ) {\n super(message, { cause: options?.cause });\n this.name = \"KontextError\";\n this.code = code;\n this.statusCode = options?.statusCode;\n this.requestId = options?.requestId;\n this.meta = options?.meta ?? {};\n this.docsUrl = `https://docs.kontext.dev/errors/${code}`;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n statusCode: this.statusCode,\n docsUrl: this.docsUrl,\n requestId: this.requestId,\n meta: Object.keys(this.meta).length > 0 ? this.meta : undefined,\n };\n }\n\n override toString(): string {\n const parts = [`[${this.code}] ${this.message}`];\n if (this.docsUrl) parts.push(`Docs: ${this.docsUrl}`);\n if (this.requestId) parts.push(`Request ID: ${this.requestId}`);\n return parts.join(\"\\n\");\n }\n}\n\n// ============================================================================\n// Type guard\n// ============================================================================\n\n/**\n * Check if an error is a KontextError without instanceof.\n * Works across package versions and bundler deduplication.\n */\nexport function isKontextError(err: unknown): err is KontextError {\n return (\n typeof err === \"object\" &&\n err !== null &&\n (err as Record<string, unknown>).kontextError === true\n );\n}\n\n// ============================================================================\n// Auth errors\n// ============================================================================\n\n/**\n * Thrown when authentication is required but no valid credentials are available.\n */\nexport class AuthorizationRequiredError extends KontextError {\n readonly authorizationUrl?: string;\n\n constructor(\n message = \"Authorization required. Complete the OAuth flow to continue.\",\n options?: {\n authorizationUrl?: string;\n requestId?: string;\n meta?: Record<string, unknown>;\n cause?: unknown;\n },\n ) {\n super(message, \"kontext_authorization_required\", {\n statusCode: 401,\n ...options,\n });\n this.name = \"AuthorizationRequiredError\";\n this.authorizationUrl = options?.authorizationUrl;\n }\n}\n\n// ============================================================================\n// OAuth errors\n// ============================================================================\n\n/**\n * Thrown when an OAuth flow fails — state validation, token exchange,\n * missing code verifier, or provider errors.\n */\nexport class OAuthError extends KontextError {\n readonly errorCode?: string;\n readonly errorDescription?: string;\n\n constructor(\n message: string,\n code: string,\n options?: {\n statusCode?: number;\n errorCode?: string;\n errorDescription?: string;\n requestId?: string;\n meta?: Record<string, unknown>;\n cause?: unknown;\n },\n ) {\n super(message, code, {\n statusCode: options?.statusCode ?? 400,\n ...options,\n });\n this.name = \"OAuthError\";\n this.errorCode = options?.errorCode;\n this.errorDescription = options?.errorDescription;\n }\n}\n\n// ============================================================================\n// Integration errors\n// ============================================================================\n\n/**\n * Thrown when an integration connection is required before a tool can be used.\n */\nexport class IntegrationConnectionRequiredError extends KontextError {\n readonly integrationId: string;\n readonly integrationName?: string;\n readonly connectUrl?: string;\n\n constructor(\n integrationId: string,\n options?: {\n integrationName?: string;\n connectUrl?: string;\n message?: string;\n requestId?: string;\n meta?: Record<string, unknown>;\n cause?: unknown;\n },\n ) {\n super(\n options?.message ??\n `Connection to integration \"${integrationId}\" is required. Visit the connect URL to authorize.`,\n \"kontext_integration_connection_required\",\n { statusCode: 403, ...options },\n );\n this.name = \"IntegrationConnectionRequiredError\";\n this.integrationId = integrationId;\n this.integrationName = options?.integrationName;\n this.connectUrl = options?.connectUrl;\n }\n}\n\n// ============================================================================\n// Config errors (NEW — replaces all plain Error config throws)\n// ============================================================================\n\n/**\n * Thrown when SDK configuration is invalid or missing.\n * These are deterministic errors caught at initialization time.\n */\nexport class ConfigError extends KontextError {\n constructor(\n message: string,\n code: string,\n options?: {\n meta?: Record<string, unknown>;\n cause?: unknown;\n },\n ) {\n super(message, code, options);\n this.name = \"ConfigError\";\n }\n}\n\n// ============================================================================\n// Network errors\n// ============================================================================\n\n/**\n * Thrown when there is a network or connection error.\n */\nexport class NetworkError extends KontextError {\n constructor(\n message = \"Network error. Check your internet connection and that the server is reachable.\",\n options?: {\n cause?: unknown;\n requestId?: string;\n meta?: Record<string, unknown>;\n },\n ) {\n super(message, \"kontext_network_error\", options);\n this.name = \"NetworkError\";\n }\n}\n\n// ============================================================================\n// HTTP response errors (differentiated by code)\n// ============================================================================\n\n/**\n * Thrown when the server returns an HTTP error.\n * Use `error.code` to distinguish between specific error types.\n */\nexport class HttpError extends KontextError {\n readonly retryAfter?: number;\n readonly validationErrors?: Array<{ field: string; message: string }>;\n\n constructor(\n message: string,\n code: string,\n options?: {\n statusCode?: number;\n retryAfter?: number;\n validationErrors?: Array<{ field: string; message: string }>;\n requestId?: string;\n meta?: Record<string, unknown>;\n cause?: unknown;\n },\n ) {\n super(message, code, {\n statusCode: options?.statusCode,\n ...options,\n });\n this.name = \"HttpError\";\n this.retryAfter = options?.retryAfter;\n this.validationErrors = options?.validationErrors;\n }\n}\n\n// ============================================================================\n// Network error detection (used by translateError)\n// ============================================================================\n\n/**\n * Safely access arbitrary properties on an error object.\n * Errors in JS frequently carry extra properties (code, statusCode, etc.)\n * that aren't part of the Error interface. This avoids `as unknown as` casts.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction errorProps(err: Error): Record<string, any> {\n return err;\n}\n\nconst NETWORK_ERROR_CODES = new Set([\n \"ECONNREFUSED\",\n \"ENOTFOUND\",\n \"ETIMEDOUT\",\n \"ECONNRESET\",\n \"ECONNABORTED\",\n \"EPIPE\",\n \"UND_ERR_CONNECT_TIMEOUT\",\n]);\n\n/**\n * Detect network errors structurally rather than by string matching.\n * Checks Node.js system error codes on the error and its cause.\n */\nexport function isNetworkError(err: Error): boolean {\n if (err.name === \"AbortError\") return true;\n\n const props = errorProps(err);\n const sysCode = props.code as string | undefined;\n if (typeof sysCode === \"string\" && NETWORK_ERROR_CODES.has(sysCode))\n return true;\n\n // fetch() throws TypeError — only classify as network error when cause\n // indicates a system-level failure\n if (err.name === \"TypeError\" && err.cause instanceof Error) {\n const causeCode = errorProps(err.cause).code;\n if (typeof causeCode === \"string\" && NETWORK_ERROR_CODES.has(causeCode))\n return true;\n }\n\n return false;\n}\n\n/**\n * Detect unauthorized errors structurally.\n * Checks status code and numeric code rather than string matching on name.\n */\nexport function isUnauthorizedError(err: Error): boolean {\n const props = errorProps(err);\n\n // Check HTTP status code (most reliable)\n if (props.statusCode === 401 || props.status === 401) return true;\n\n // Check MCP SDK UnauthorizedError by name (last resort, but needed for\n // MCP SDK errors which don't set statusCode)\n if (err.name === \"UnauthorizedError\") return true;\n if (err.message === \"Unauthorized\") return true;\n\n return false;\n}\n\n// ============================================================================\n// Elicitation types\n// ============================================================================\n\nexport interface ElicitationEntry {\n readonly url: string;\n readonly message: string;\n readonly elicitationId: string;\n readonly integrationId?: string;\n readonly integrationName?: string;\n}\n\n// ============================================================================\n// HTTP error parsing\n// ============================================================================\n\n/**\n * Parse an HTTP response into an appropriate error.\n */\nexport function parseHttpError(\n statusCode: number,\n body?: unknown,\n): KontextError {\n const message =\n typeof body === \"object\" && body !== null && \"message\" in body\n ? String((body as { message: unknown }).message)\n : `HTTP ${statusCode}`;\n\n const errorCode =\n typeof body === \"object\" && body !== null && \"code\" in body\n ? String((body as { code: unknown }).code)\n : undefined;\n\n switch (statusCode) {\n case 400:\n if (\n typeof body === \"object\" &&\n body !== null &&\n \"errors\" in body &&\n Array.isArray((body as { errors: unknown }).errors)\n ) {\n return new HttpError(message, \"kontext_validation_error\", {\n statusCode: 400,\n validationErrors: (\n body as { errors: Array<{ field: string; message: string }> }\n ).errors,\n });\n }\n return new KontextError(message, errorCode ?? \"kontext_bad_request\", {\n statusCode: 400,\n });\n\n case 401:\n return new AuthorizationRequiredError(message);\n\n case 403:\n if (errorCode === \"INTEGRATION_CONNECTION_REQUIRED\") {\n const details = body as {\n integrationId?: string;\n integrationName?: string;\n connectUrl?: string;\n };\n return new IntegrationConnectionRequiredError(\n details.integrationId ?? \"unknown\",\n {\n integrationName: details.integrationName,\n connectUrl: details.connectUrl,\n message,\n },\n );\n }\n return new HttpError(message, \"kontext_policy_denied\", {\n statusCode: 403,\n meta: { policy: (body as Record<string, unknown>)?.policy },\n });\n\n case 404:\n return new HttpError(message, \"kontext_not_found\", { statusCode: 404 });\n\n case 429: {\n const retryAfter =\n typeof body === \"object\" && body !== null && \"retryAfter\" in body\n ? Number((body as { retryAfter: unknown }).retryAfter)\n : undefined;\n return new HttpError(\n retryAfter\n ? `Rate limit exceeded. Retry after ${retryAfter} seconds.`\n : \"Rate limit exceeded. Wait and retry.\",\n \"kontext_rate_limited\",\n { statusCode: 429, retryAfter },\n );\n }\n\n default:\n if (statusCode >= 500) {\n return new HttpError(\n `Server error (HTTP ${statusCode}): ${message}`,\n \"kontext_server_error\",\n { statusCode },\n );\n }\n return new KontextError(message, errorCode ?? \"kontext_unknown_error\", {\n statusCode,\n });\n }\n}\n","/**\n * Service account authentication using OAuth 2.0 client_credentials flow\n */\n\nimport {\n AuthorizationRequiredError,\n NetworkError,\n OAuthError,\n} from \"../errors.js\";\n\nexport interface ServiceAccountCredentials {\n clientId: string;\n clientSecret: string;\n}\n\nexport interface AccessToken {\n accessToken: string;\n tokenType: string;\n expiresAt: Date | null;\n scope?: string;\n}\n\ninterface TokenResponse {\n access_token: string;\n token_type: string;\n expires_in?: number;\n scope?: string;\n}\n\n/**\n * Authenticates using the OAuth 2.0 client_credentials grant\n * @param tokenUrl The token endpoint URL\n * @param credentials Service account client credentials\n * @param scopes Optional scopes to request\n * @param audience Optional audience for the token\n * @returns Access token response\n */\nexport async function authenticateServiceAccount(\n tokenUrl: string,\n credentials: ServiceAccountCredentials,\n scopes?: string[],\n audience?: string,\n): Promise<AccessToken> {\n const params = new URLSearchParams({\n grant_type: \"client_credentials\",\n });\n\n if (scopes && scopes.length > 0) {\n params.set(\"scope\", scopes.join(\" \"));\n }\n\n // Hydra requires audience at token request time for introspection\n if (audience) {\n params.set(\"audience\", audience);\n }\n\n // Use HTTP Basic Auth for client credentials (client_secret_basic)\n const basicAuth = Buffer.from(\n `${credentials.clientId}:${credentials.clientSecret}`,\n ).toString(\"base64\");\n\n let response: Response;\n try {\n response = await fetch(tokenUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n Accept: \"application/json\",\n Authorization: `Basic ${basicAuth}`,\n },\n body: params.toString(),\n });\n } catch (err) {\n throw new NetworkError(\"Failed to connect to token endpoint\", {\n cause: err instanceof Error ? err : undefined,\n });\n }\n\n if (!response.ok) {\n let errorBody: unknown;\n try {\n errorBody = await response.json();\n } catch {\n errorBody = await response.text();\n }\n\n if (response.status === 401) {\n throw new AuthorizationRequiredError(\n \"Invalid service account credentials\",\n );\n }\n\n const errorCode =\n typeof errorBody === \"object\" &&\n errorBody !== null &&\n \"error\" in errorBody\n ? String((errorBody as { error: unknown }).error)\n : \"unknown_error\";\n\n const errorDescription =\n typeof errorBody === \"object\" &&\n errorBody !== null &&\n \"error_description\" in errorBody\n ? String(\n (errorBody as { error_description: unknown }).error_description,\n )\n : undefined;\n\n throw new OAuthError(\n errorDescription ?? `Token request failed: ${errorCode}`,\n \"kontext_oauth_token_exchange_failed\",\n { errorCode, errorDescription },\n );\n }\n\n const tokenData = (await response.json()) as TokenResponse;\n\n return {\n accessToken: tokenData.access_token,\n tokenType: tokenData.token_type,\n expiresAt: tokenData.expires_in\n ? new Date(Date.now() + tokenData.expires_in * 1000)\n : null,\n scope: tokenData.scope,\n };\n}\n\n/**\n * Token manager for automatic token refresh\n */\nexport class TokenManager {\n private token: AccessToken | null = null;\n private tokenPromise: Promise<AccessToken> | null = null;\n private readonly bufferSeconds = 60; // Refresh 60 seconds before expiry\n\n constructor(\n private readonly tokenUrl: string,\n private readonly credentials: ServiceAccountCredentials,\n private readonly scopes?: string[],\n private readonly audience?: string,\n ) {}\n\n /**\n * Get a valid access token, refreshing if necessary\n */\n async getAccessToken(): Promise<string> {\n // If we have a valid token, return it\n if (this.token && !this.isExpired(this.token)) {\n return this.token.accessToken;\n }\n\n if (!this.tokenPromise) {\n this.tokenPromise = this.refresh().finally(() => {\n this.tokenPromise = null;\n });\n }\n\n const token = await this.tokenPromise;\n return token.accessToken;\n }\n\n /**\n * Force a token refresh\n */\n async refresh(): Promise<AccessToken> {\n this.token = await authenticateServiceAccount(\n this.tokenUrl,\n this.credentials,\n this.scopes,\n this.audience,\n );\n return this.token;\n }\n\n /**\n * Clear the cached token\n */\n clear(): void {\n this.token = null;\n this.tokenPromise = null;\n }\n\n private isExpired(token: AccessToken): boolean {\n if (!token.expiresAt) {\n return false;\n }\n const bufferMs = this.bufferSeconds * 1000;\n return Date.now() >= token.expiresAt.getTime() - bufferMs;\n }\n}\n","/**\n * HTTP client utilities for the Management API\n */\n\nimport { NetworkError, parseHttpError } from \"../errors.js\";\nimport type { PaginationParams } from \"./types.js\";\nimport type { TokenManager } from \"./auth.js\";\n\nexport interface HttpClientConfig {\n baseUrl: string;\n apiVersion: string;\n tokenManager: TokenManager;\n}\n\n/**\n * Internal HTTP client for making authenticated API requests\n */\nexport class HttpClient {\n private readonly baseUrl: string;\n\n constructor(private readonly config: HttpClientConfig) {\n // Ensure baseUrl doesn't end with a slash\n this.baseUrl = `${config.baseUrl.replace(/\\/$/, \"\")}/api/${config.apiVersion}`;\n }\n\n /**\n * Make a GET request\n */\n async get<T>(\n path: string,\n params?: Record<string, string | number | undefined>,\n ): Promise<T> {\n const url = this.buildUrl(path, params);\n return this.request<T>(\"GET\", url, undefined, true);\n }\n\n /**\n * Make a POST request\n */\n async post<T>(path: string, body?: unknown): Promise<T> {\n const url = this.buildUrl(path);\n return this.request<T>(\"POST\", url, body, true);\n }\n\n /**\n * Make a POST request without expecting a response body\n */\n async postNoContent(path: string, body?: unknown): Promise<void> {\n const url = this.buildUrl(path);\n await this.request(\"POST\", url, body, false);\n }\n\n /**\n * Make a PUT request\n */\n async put<T>(path: string, body?: unknown): Promise<T> {\n const url = this.buildUrl(path);\n return this.request<T>(\"PUT\", url, body, true);\n }\n\n /**\n * Make a PATCH request\n */\n async patch<T>(path: string, body?: unknown): Promise<T> {\n const url = this.buildUrl(path);\n return this.request<T>(\"PATCH\", url, body, true);\n }\n\n /**\n * Make a DELETE request\n */\n async delete(path: string): Promise<void> {\n const url = this.buildUrl(path);\n await this.request(\"DELETE\", url, undefined, false);\n }\n\n /**\n * Make a DELETE request expecting a response body\n */\n async deleteJson<T>(path: string): Promise<T> {\n const url = this.buildUrl(path);\n return this.request<T>(\"DELETE\", url, undefined, true);\n }\n\n private buildUrl(\n path: string,\n params?: Record<string, string | number | undefined>,\n ): string {\n // Remove leading slash from path to properly join with baseUrl\n const normalizedPath = path.startsWith(\"/\") ? path.slice(1) : path;\n const url = new URL(normalizedPath, this.baseUrl + \"/\");\n if (params) {\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n return url.toString();\n }\n\n private async request<T>(\n method: string,\n url: string,\n body: unknown | undefined,\n expectBody: true,\n ): Promise<T>;\n private async request(\n method: string,\n url: string,\n body: unknown | undefined,\n expectBody: false,\n ): Promise<void>;\n private async request<T>(\n method: string,\n url: string,\n body: unknown | undefined,\n expectBody: boolean,\n ): Promise<T | void> {\n const accessToken = await this.config.tokenManager.getAccessToken();\n\n const headers: Record<string, string> = {\n Authorization: `Bearer ${accessToken}`,\n Accept: \"application/json\",\n };\n\n if (body !== undefined) {\n headers[\"Content-Type\"] = \"application/json\";\n }\n\n let response: Response;\n try {\n response = await fetch(url, {\n method,\n headers,\n body: body !== undefined ? JSON.stringify(body) : undefined,\n });\n } catch (err) {\n throw new NetworkError(`Request to ${url} failed`, {\n cause: err instanceof Error ? err : undefined,\n });\n }\n\n // Handle empty responses (204 No Content)\n if (response.status === 204) {\n if (expectBody) {\n throw new NetworkError(\n `Expected response body but got 204 from ${url}`,\n );\n }\n return;\n }\n\n let responseBody: unknown;\n if (expectBody || !response.ok) {\n const contentType = response.headers.get(\"content-type\");\n if (contentType?.includes(\"application/json\")) {\n try {\n responseBody = await response.json();\n } catch {\n responseBody = undefined;\n }\n } else {\n responseBody = await response.text();\n }\n }\n\n if (!response.ok) {\n throw parseHttpError(response.status, responseBody);\n }\n\n if (!expectBody) {\n return;\n }\n\n return responseBody as T;\n }\n}\n\n/**\n * Convert pagination params to query params\n */\nexport function paginationToParams(\n pagination?: PaginationParams,\n): Record<string, string | number | undefined> {\n return {\n cursor: pagination?.cursor,\n limit: pagination?.limit,\n };\n}\n","/**\n * Service Accounts resource methods\n */\n\nimport type {\n CreateServiceAccountInput,\n CreateServiceAccountResponse,\n ListServiceAccountsResponse,\n PaginationParams,\n RotateSecretResponse,\n ServiceAccountResponse,\n} from \"./types.js\";\nimport type { HttpClient } from \"./http.js\";\nimport { paginationToParams } from \"./http.js\";\n\n/**\n * Service Accounts API methods\n */\nexport class ServiceAccountsResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Create a new service account\n * @param input Service account creation parameters\n * @returns The created service account with credentials\n */\n async create(\n input: CreateServiceAccountInput,\n ): Promise<CreateServiceAccountResponse> {\n return this.http.post<CreateServiceAccountResponse>(\n \"/service-accounts\",\n input,\n );\n }\n\n /**\n * List all service accounts\n * @param pagination Optional pagination parameters\n * @returns List of service accounts\n */\n async list(\n pagination?: PaginationParams,\n ): Promise<ListServiceAccountsResponse> {\n return this.http.get<ListServiceAccountsResponse>(\n \"/service-accounts\",\n paginationToParams(pagination),\n );\n }\n\n /**\n * Get a service account by ID\n * @param id Service account ID\n * @returns The service account\n */\n async get(id: string): Promise<ServiceAccountResponse> {\n return this.http.get<ServiceAccountResponse>(`/service-accounts/${id}`);\n }\n\n /**\n * Rotate a service account's client secret\n * @param id Service account ID\n * @returns New credentials\n */\n async rotateSecret(id: string): Promise<RotateSecretResponse> {\n return this.http.post<RotateSecretResponse>(\n `/service-accounts/${id}/rotate-secret`,\n );\n }\n\n /**\n * Revoke (delete) a service account\n * @param id Service account ID\n */\n async revoke(id: string): Promise<void> {\n await this.http.delete(`/service-accounts/${id}`);\n }\n}\n","/**\n * Applications resource methods\n */\n\nimport type {\n ApplicationIntegrationsResponse,\n ApplicationOAuthResponse,\n ApplicationResponse,\n CreateApplicationInput,\n CreateApplicationResponse,\n ListApplicationsResponse,\n PaginationParams,\n RevokeAllSessionsResponse,\n RotateApplicationSecretResponse,\n UpdateApplicationInput,\n UpdateApplicationIntegrationsInput,\n UpdateApplicationOAuthInput,\n} from \"./types.js\";\nimport type { HttpClient } from \"./http.js\";\nimport { paginationToParams } from \"./http.js\";\n\n/**\n * Applications API methods\n */\nexport class ApplicationsResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Create a new application\n * @param input Application creation parameters\n * @returns The created application with OAuth config\n */\n async create(\n input: CreateApplicationInput,\n ): Promise<CreateApplicationResponse> {\n return this.http.post<CreateApplicationResponse>(\"/applications\", input);\n }\n\n /**\n * List all applications\n * @param pagination Optional pagination parameters\n * @returns List of applications\n */\n async list(pagination?: PaginationParams): Promise<ListApplicationsResponse> {\n return this.http.get<ListApplicationsResponse>(\n \"/applications\",\n paginationToParams(pagination),\n );\n }\n\n /**\n * Get an application by ID\n * @param id Application ID\n * @returns The application\n */\n async get(id: string): Promise<ApplicationResponse> {\n return this.http.get<ApplicationResponse>(`/applications/${id}`);\n }\n\n /**\n * Update an application\n * @param id Application ID\n * @param input Update parameters\n * @returns The updated application\n */\n async update(\n id: string,\n input: UpdateApplicationInput,\n ): Promise<ApplicationResponse> {\n return this.http.patch<ApplicationResponse>(`/applications/${id}`, input);\n }\n\n /**\n * Archive an application (soft delete)\n * @param id Application ID\n */\n async archive(id: string): Promise<void> {\n await this.http.delete(`/applications/${id}`);\n }\n\n /**\n * Get an application's OAuth configuration\n * @param id Application ID\n * @returns The OAuth configuration\n */\n async getOAuth(id: string): Promise<ApplicationOAuthResponse> {\n return this.http.get<ApplicationOAuthResponse>(`/applications/${id}/oauth`);\n }\n\n /**\n * Update an application's OAuth configuration\n * @param id Application ID\n * @param input OAuth update parameters\n * @returns The updated OAuth configuration\n */\n async updateOAuth(\n id: string,\n input: UpdateApplicationOAuthInput,\n ): Promise<ApplicationOAuthResponse> {\n return this.http.patch<ApplicationOAuthResponse>(\n `/applications/${id}/oauth`,\n input,\n );\n }\n\n /**\n * Rotate an application's client secret (confidential clients only)\n * @param id Application ID\n * @returns The new OAuth configuration with new secret\n */\n async rotateSecret(id: string): Promise<RotateApplicationSecretResponse> {\n return this.http.post<RotateApplicationSecretResponse>(\n `/applications/${id}/rotate-secret`,\n );\n }\n\n /**\n * List integrations attached to an application\n * @param id Application ID\n * @returns List of integration IDs\n */\n async listIntegrations(id: string): Promise<ApplicationIntegrationsResponse> {\n return this.http.get<ApplicationIntegrationsResponse>(\n `/applications/${id}/integrations`,\n );\n }\n\n /**\n * Set the integrations attached to an application (replaces all)\n * @param id Application ID\n * @param input Integration IDs to attach\n * @returns Updated list of integration IDs\n */\n async setIntegrations(\n id: string,\n input: UpdateApplicationIntegrationsInput,\n ): Promise<ApplicationIntegrationsResponse> {\n return this.http.put<ApplicationIntegrationsResponse>(\n `/applications/${id}/integrations`,\n input,\n );\n }\n\n /**\n * Attach a single integration to an application\n * @param id Application ID\n * @param integrationId Integration ID to attach\n */\n async attachIntegration(id: string, integrationId: string): Promise<void> {\n await this.http.postNoContent(\n `/applications/${id}/integrations/${integrationId}`,\n );\n }\n\n /**\n * Detach a single integration from an application\n * @param id Application ID\n * @param integrationId Integration ID to detach\n */\n async detachIntegration(id: string, integrationId: string): Promise<void> {\n await this.http.delete(`/applications/${id}/integrations/${integrationId}`);\n }\n\n /**\n * Revoke all agent sessions for an application\n * @param id Application ID\n */\n async revokeAllAgentSessions(id: string): Promise<RevokeAllSessionsResponse> {\n return this.http.deleteJson<RevokeAllSessionsResponse>(\n `/applications/${id}/sessions`,\n );\n }\n}\n","/**\n * Integrations resource methods\n */\n\nimport type {\n CreateIntegrationInput,\n CreateIntegrationResponse,\n IntegrationResponse,\n ListIntegrationsResponse,\n PaginationParams,\n UpdateIntegrationInput,\n ValidateIntegrationResponse,\n} from \"./types.js\";\nimport type { HttpClient } from \"./http.js\";\nimport { paginationToParams } from \"./http.js\";\n\n/**\n * Integrations API methods\n */\nexport class IntegrationsResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Create a new integration\n * @param input Integration creation parameters\n * @returns The created integration\n */\n async create(\n input: CreateIntegrationInput,\n ): Promise<CreateIntegrationResponse> {\n return this.http.post<CreateIntegrationResponse>(\"/integrations\", input);\n }\n\n /**\n * List all integrations\n * @param pagination Optional pagination parameters\n * @returns List of integrations\n */\n async list(pagination?: PaginationParams): Promise<ListIntegrationsResponse> {\n return this.http.get<ListIntegrationsResponse>(\n \"/integrations\",\n paginationToParams(pagination),\n );\n }\n\n /**\n * Get an integration by ID\n * @param id Integration ID\n * @returns The integration\n */\n async get(id: string): Promise<IntegrationResponse> {\n return this.http.get<IntegrationResponse>(`/integrations/${id}`);\n }\n\n /**\n * Update an integration\n * @param id Integration ID\n * @param input Update parameters\n * @returns The updated integration\n */\n async update(\n id: string,\n input: UpdateIntegrationInput,\n ): Promise<IntegrationResponse> {\n return this.http.patch<IntegrationResponse>(`/integrations/${id}`, input);\n }\n\n /**\n * Archive an integration (soft delete)\n * @param id Integration ID\n */\n async archive(id: string): Promise<void> {\n await this.http.delete(`/integrations/${id}`);\n }\n\n /**\n * Validate an integration (test connectivity)\n * @param id Integration ID\n * @returns Validation result\n */\n async validate(id: string): Promise<ValidateIntegrationResponse> {\n return this.http.post<ValidateIntegrationResponse>(\n `/integrations/${id}/validate`,\n );\n }\n}\n","/**\n * Agent Sessions resource methods\n */\n\nimport type {\n AgentSessionResponse,\n ListAgentSessionsResponse,\n RevokeAllSessionsResponse,\n} from \"./types.js\";\nimport type { HttpClient } from \"./http.js\";\n\nexport interface ListAgentSessionsParams {\n /** Include inactive sessions (disconnected/expired) */\n includeInactive?: boolean;\n /** Filter by status; \"all\" or \"inactive\" enables includeInactive */\n status?: \"active\" | \"inactive\" | \"all\";\n /** Limit number of sessions returned */\n limit?: number;\n}\n\n/**\n * Agent Sessions API methods\n */\nexport class AgentSessionsResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * List all agent sessions\n * @param params Optional filter and pagination parameters\n * @returns List of agent sessions\n */\n async list(\n applicationId: string,\n params?: ListAgentSessionsParams,\n ): Promise<ListAgentSessionsResponse> {\n return this.http.get<ListAgentSessionsResponse>(\n `/applications/${applicationId}/sessions`,\n {\n status: params?.status,\n includeInactive: params?.includeInactive ? \"true\" : undefined,\n limit: params?.limit,\n },\n );\n }\n\n /**\n * Get an agent session by ID\n * @param id Agent session ID\n * @returns The agent session\n */\n async get(\n applicationId: string,\n sessionId: string,\n ): Promise<AgentSessionResponse> {\n return this.http.get<AgentSessionResponse>(\n `/applications/${applicationId}/sessions/${sessionId}`,\n );\n }\n\n /**\n * Revoke all sessions for an application\n */\n async revokeAll(applicationId: string): Promise<RevokeAllSessionsResponse> {\n return this.http.deleteJson<RevokeAllSessionsResponse>(\n `/applications/${applicationId}/sessions`,\n );\n }\n}\n","/**\n * Traces and Events resource methods\n */\n\nimport type {\n McpEventListResponse,\n ListTracesResponse,\n TraceEvent,\n PaginationParams,\n TraceResponse,\n TraceStatsResponse,\n} from \"./types.js\";\nimport type { HttpClient } from \"./http.js\";\n\nexport interface ListTracesParams extends PaginationParams {\n /** Filter by owner user ID (admin/owner only) */\n userId?: string;\n /** Filter by agent/application ID */\n agentId?: string;\n /** Filter by application ID (legacy alias for agentId) */\n applicationId?: string;\n /** Filter by agent session ID */\n sessionId?: string;\n /** Offset for pagination */\n offset?: number;\n /** @deprecated No longer supported by the API */\n startAfter?: string;\n /** @deprecated No longer supported by the API */\n startBefore?: string;\n}\n\nexport interface ListEventsParams extends PaginationParams {\n /** Maximum number of events to return (default: 100, max: 200) */\n limit?: number;\n}\n\nexport interface TraceStatsParams {\n /** Period window (\"1d\", \"7d\", \"30d\") */\n period?: string;\n /** Filter by owner user ID (admin/owner only) */\n userId?: string;\n /** @deprecated No longer supported by the API */\n applicationId?: string;\n /** @deprecated Legacy input; mapped to period when possible */\n startTime?: string;\n /** @deprecated Legacy input; currently unused */\n endTime?: string;\n}\n\n/**\n * Traces API methods\n */\nexport class TracesResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * List traces\n * @param params Optional filter and pagination parameters\n * @returns List of traces\n */\n async list(params?: ListTracesParams): Promise<ListTracesResponse> {\n const agentId = params?.agentId ?? params?.applicationId;\n const offsetFromCursor =\n params?.cursor && !Number.isNaN(Number(params.cursor))\n ? Number(params.cursor)\n : undefined;\n\n return this.http.get<ListTracesResponse>(\"/traces\", {\n limit: params?.limit,\n offset: params?.offset ?? offsetFromCursor,\n userId: params?.userId,\n sessionId: params?.sessionId,\n agentId,\n });\n }\n\n /**\n * Get a trace by ID with its events\n * @param id Trace ID\n * @returns The trace with events\n */\n async get(id: string, params?: { userId?: string }): Promise<TraceResponse> {\n const response = await this.http.get<\n | TraceResponse\n | {\n events: TraceEvent[];\n }\n >(`/traces/${id}`, {\n userId: params?.userId,\n });\n\n if (\"trace\" in response && response.trace) {\n return response;\n }\n\n const events = response.events ?? [];\n const first = events[0];\n const last = events.length > 0 ? events[events.length - 1] : undefined;\n const traceId = first?.traceId ?? id;\n const sessionId = first?.sessionId ?? \"\";\n const okCount = events.filter((event) => event.status === \"ok\").length;\n const warnCount = events.filter((event) => event.status === \"warn\").length;\n const errorCount = events.filter((event) =>\n [\"error_remote\", \"error_proxy\", \"error_auth\", \"error\"].includes(\n event.status,\n ),\n ).length;\n\n return {\n trace: {\n traceId,\n sessionId,\n startedAt: first?.createdAt ?? null,\n endedAt: last?.createdAt ?? null,\n eventCount: events.length,\n okCount,\n warnCount,\n errorCount,\n agentId: first?.agentId,\n agentSessionId: first?.agentSessionId ?? undefined,\n },\n events,\n };\n }\n\n /**\n * Get trace statistics\n * @param params Optional filter parameters\n * @returns Trace statistics\n */\n async stats(params?: TraceStatsParams): Promise<TraceStatsResponse> {\n const period =\n params?.period ??\n (params?.startTime\n ? inferPeriodFromStartTime(params.startTime)\n : undefined);\n\n const response = await this.http.get<\n TraceStatsResponse | TraceStatsResponse[\"stats\"]\n >(\"/traces/stats\", {\n period,\n userId: params?.userId,\n });\n\n if (\"stats\" in response) {\n return response;\n }\n\n return { stats: response };\n }\n}\n\n/**\n * Events API methods\n */\nexport class EventsResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * List events\n * @param params Optional filter and pagination parameters\n * @returns List of events\n */\n async list(params?: ListEventsParams): Promise<McpEventListResponse> {\n return this.http.get<McpEventListResponse>(\"/mcp-events\", {\n limit: params?.limit,\n });\n }\n}\n\nfunction inferPeriodFromStartTime(startTime: string): string {\n const startMs = Date.parse(startTime);\n if (Number.isNaN(startMs)) {\n return \"7d\";\n }\n\n const diffMs = Date.now() - startMs;\n const diffDays = Math.ceil(diffMs / (24 * 60 * 60 * 1000));\n\n if (diffDays <= 1) return \"1d\";\n if (diffDays <= 7) return \"7d\";\n return \"30d\";\n}\n","/**\n * KontextManagementClient - Control plane client for administrative operations\n */\n\nimport type { KontextManagementClientConfig } from \"./types.js\";\nimport { TokenManager } from \"./auth.js\";\nimport { HttpClient } from \"./http.js\";\nimport { ServiceAccountsResource } from \"./service-accounts.js\";\nimport { ApplicationsResource } from \"./applications.js\";\nimport { IntegrationsResource } from \"./integrations.js\";\nimport { AgentSessionsResource } from \"./agent-sessions.js\";\nimport { TracesResource, EventsResource } from \"./traces.js\";\n\nconst DEFAULT_API_VERSION = \"v1\";\n\n/**\n * Management API client for Kontext\n *\n * Use this client for administrative operations like:\n * - Creating and managing service accounts\n * - Creating and configuring applications\n * - Managing integrations\n * - Viewing agent sessions and traces\n *\n * @example\n * ```typescript\n * const client = new KontextManagementClient({\n * baseUrl: 'https://api.kontext.dev',\n * credentials: {\n * clientId: 'your-service-account-client-id',\n * clientSecret: 'your-service-account-client-secret',\n * },\n * });\n *\n * // Create an application\n * const { application, oauth } = await client.applications.create({\n * name: 'My Agent',\n * oauth: {\n * redirectUris: ['http://localhost:3000/callback'],\n * },\n * });\n *\n * // Create an integration\n * const { integration } = await client.integrations.create({\n * name: 'GitHub',\n * url: 'https://mcp.github.com/sse',\n * authMode: 'oauth',\n * oauth: { provider: 'github' },\n * });\n *\n * // Attach integration to application\n * await client.applications.attachIntegration(application.id, integration.id);\n * ```\n */\nexport class KontextManagementClient {\n private readonly tokenManager: TokenManager;\n private readonly http: HttpClient;\n\n /** Service Accounts resource */\n public readonly serviceAccounts: ServiceAccountsResource;\n\n /** Applications resource */\n public readonly applications: ApplicationsResource;\n\n /** Integrations resource */\n public readonly integrations: IntegrationsResource;\n\n /** Agent Sessions resource (alias: agentInstances) */\n public readonly agentSessions: AgentSessionsResource;\n\n /** Agent Instances resource (alias for agentSessions, future naming) */\n public readonly agentInstances: AgentSessionsResource;\n\n /** Traces resource */\n public readonly traces: TracesResource;\n\n /** Events resource */\n public readonly events: EventsResource;\n\n constructor(config: KontextManagementClientConfig) {\n const baseUrl = config.baseUrl.replace(/\\/$/, \"\");\n const apiVersion = config.apiVersion ?? DEFAULT_API_VERSION;\n\n // Token URL defaults to ${baseUrl}/oauth2/token but can be overridden\n // for local development where Hydra runs on a different port\n const tokenUrl = config.tokenUrl ?? `${baseUrl}/oauth2/token`;\n\n // Default scopes for management API access\n const scopes = config.scopes ?? [\"management:all\"];\n\n // Audience for token introspection - defaults to the API base URL\n const audience = config.audience ?? `${baseUrl}/api/${apiVersion}`;\n\n this.tokenManager = new TokenManager(\n tokenUrl,\n {\n clientId: config.credentials.clientId,\n clientSecret: config.credentials.clientSecret,\n },\n scopes,\n audience,\n );\n\n this.http = new HttpClient({\n baseUrl,\n apiVersion,\n tokenManager: this.tokenManager,\n });\n\n // Initialize resource modules\n this.serviceAccounts = new ServiceAccountsResource(this.http);\n this.applications = new ApplicationsResource(this.http);\n this.integrations = new IntegrationsResource(this.http);\n this.agentSessions = new AgentSessionsResource(this.http);\n this.agentInstances = this.agentSessions; // Alias for future naming\n this.traces = new TracesResource(this.http);\n this.events = new EventsResource(this.http);\n }\n\n /**\n * Force refresh the access token\n * Useful if you need to ensure a fresh token before a critical operation\n */\n async refreshToken(): Promise<void> {\n await this.tokenManager.refresh();\n }\n\n /**\n * Clear the cached access token\n * Useful when credentials have been rotated\n */\n clearToken(): void {\n this.tokenManager.clear();\n }\n}\n","/**\n * Core types for the Kontext SDK\n * These mirror the API DTOs for type-safe interactions\n */\n\n// ============================================================================\n// Applications\n// ============================================================================\n\nexport interface Application {\n id: string;\n name: string;\n canModify?: boolean;\n activeSessionCount?: number;\n idleSessionCount?: number;\n liveSessionCount?: number;\n totalSessionCount?: number;\n oauth?: ApplicationOAuth;\n archivedAt?: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface ApplicationOAuth {\n type: \"public\" | \"confidential\";\n clientId: string;\n clientSecret?: string;\n pkceRequired: boolean;\n scopes: string[];\n authorizationUrl: string;\n tokenUrl: string;\n gatewayUrl: string;\n redirectUris: string[];\n}\n\nexport interface CreateApplicationOAuthInput {\n type?: \"public\" | \"confidential\";\n redirectUris: string[];\n pkceRequired?: boolean;\n scopes?: string[];\n}\n\nexport interface CreateApplicationInput {\n name: string;\n oauth: CreateApplicationOAuthInput;\n}\n\nexport interface UpdateApplicationInput {\n name?: string;\n}\n\nexport interface UpdateApplicationOAuthInput {\n pkceRequired?: boolean;\n scopes?: string[];\n redirectUris?: string[];\n}\n\nexport interface CreateApplicationResponse {\n application: Application;\n oauth: ApplicationOAuth;\n}\n\nexport interface ApplicationResponse {\n application: Application;\n}\n\nexport interface ApplicationOAuthResponse {\n oauth: ApplicationOAuth;\n}\n\nexport interface ListApplicationsResponse {\n items: Application[];\n nextCursor?: string;\n}\n\nexport interface RotateApplicationSecretResponse {\n oauth: ApplicationOAuth;\n}\n\nexport interface UpdateApplicationIntegrationsInput {\n integrationIds: string[];\n}\n\nexport interface ApplicationIntegrationsResponse {\n integrationIds: string[];\n}\n\n// ============================================================================\n// Integrations\n// ============================================================================\n\nexport type IntegrationAuthMode =\n | \"oauth\"\n | \"user_token\"\n | \"server_token\"\n | \"none\";\n\nexport type IntegrationValidationStatus = \"pending\" | \"valid\" | \"invalid\";\n\nexport interface IntegrationOAuthSummary {\n provider?: string;\n issuer?: string;\n scopes?: string[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface IntegrationCapabilities {\n tools?: boolean;\n resources?: boolean;\n prompts?: boolean;\n}\n\nexport interface Integration {\n id: string;\n name: string;\n url: string;\n authMode: IntegrationAuthMode;\n oauth?: IntegrationOAuthSummary;\n capabilities?: IntegrationCapabilities;\n serverTokenConfigured: boolean;\n validationStatus: IntegrationValidationStatus;\n validationMessage?: string;\n lastValidatedAt?: string;\n userConnection?: ConnectionStatusResponse;\n createdAt: string;\n updatedAt: string;\n archivedAt?: string;\n}\n\nexport interface IntegrationOAuthConfigInput {\n provider?: string;\n issuer?: string;\n scopes?: string[];\n}\n\nexport interface CreateIntegrationInput {\n name: string;\n url: string;\n authMode?: IntegrationAuthMode;\n oauth?: IntegrationOAuthConfigInput;\n capabilities?: IntegrationCapabilities;\n serverToken?: string;\n}\n\nexport interface UpdateIntegrationInput {\n name?: string;\n url?: string;\n authMode?: IntegrationAuthMode;\n oauth?: IntegrationOAuthConfigInput;\n capabilities?: IntegrationCapabilities;\n serverToken?: string;\n}\n\nexport interface CreateIntegrationResponse {\n integration: Integration;\n}\n\nexport interface IntegrationResponse {\n integration: Integration;\n}\n\nexport interface ListIntegrationsResponse {\n items: Integration[];\n nextCursor?: string;\n}\n\nexport interface ValidateIntegrationResponse {\n status: IntegrationValidationStatus;\n message?: string;\n}\n\n// ============================================================================\n// Integration Connections\n// ============================================================================\n\nexport type ConnectionStatus = \"connected\" | \"disconnected\";\n\nexport interface ConnectionStatusResponse {\n connected: boolean;\n status?: ConnectionStatus;\n expiresAt?: string;\n displayName?: string;\n}\n\nexport interface ConnectionResponse {\n connection: ConnectionStatusResponse;\n}\n\nexport interface AddUserTokenInput {\n token: string;\n}\n\n// ============================================================================\n// Service Accounts\n// ============================================================================\n\nexport interface ServiceAccount {\n id: string;\n name: string;\n description: string | null;\n createdAt: string;\n}\n\nexport interface ServiceAccountCredentials {\n clientId: string;\n clientSecret: string;\n}\n\nexport interface CreateServiceAccountInput {\n name: string;\n description?: string;\n}\n\nexport interface CreateServiceAccountResponse {\n serviceAccount: ServiceAccount;\n credentials: ServiceAccountCredentials;\n}\n\nexport interface RotateSecretResponse {\n credentials: ServiceAccountCredentials;\n}\n\nexport interface ListServiceAccountsResponse {\n items: ServiceAccount[];\n nextCursor: string | null;\n}\n\nexport interface ServiceAccountResponse {\n serviceAccount: ServiceAccount;\n}\n\n// ============================================================================\n// Agent Sessions\n// ============================================================================\n\nexport type AgentSessionStatus = \"active\" | \"disconnected\";\nexport type AgentSessionDerivedStatus =\n | \"active\"\n | \"idle\"\n | \"expired\"\n | \"disconnected\";\n\nexport interface AgentSession {\n id: string;\n agentId: string;\n organizationId: string;\n name: string;\n hostname?: string | null;\n userAgent?: string | null;\n clientInfo?: Record<string, unknown> | null;\n status: AgentSessionStatus;\n derivedStatus: AgentSessionDerivedStatus;\n connectedAt?: string;\n lastActiveAt?: string;\n disconnectedAt?: string;\n tokenExpiresAt?: string;\n createdAt: string;\n}\n\nexport interface AgentSessionResponse {\n session: AgentSession;\n}\n\nexport interface ListAgentSessionsResponse {\n items: AgentSession[];\n}\n\nexport interface RevokeAllSessionsResponse {\n success: boolean;\n disconnectedCount: number;\n}\n\n// ============================================================================\n// Traces & Events\n// ============================================================================\n\nexport interface Trace {\n traceId: string | null;\n sessionId: string;\n startedAt: string | null;\n endedAt: string | null;\n eventCount: number;\n okCount?: number;\n warnCount?: number;\n errorCount?: number;\n agentId?: string;\n ownerUserId?: string;\n ownerEmail?: string;\n agentName?: string;\n agentSessionId?: string;\n agentSessionName?: string;\n}\n\nexport interface TraceEvent {\n id: string;\n createdAt: string;\n sessionId: string;\n agentId: string;\n traceId?: string | null;\n apiKeyId?: string | null;\n eventType: string;\n status: string;\n durationMs?: number | null;\n integrationId?: string | null;\n toolName?: string | null;\n errorMessage?: string | null;\n bytesIn?: number | null;\n bytesOut?: number | null;\n requestJson?: unknown;\n responseJson?: unknown;\n parentEventId?: string | null;\n agentSessionId?: string | null;\n /** @deprecated Use createdAt */\n timestamp?: string;\n /** @deprecated Use status */\n level?: \"ok\" | \"warn\" | \"error\";\n /** @deprecated Use eventType */\n type?: string;\n /** @deprecated May be encoded in requestJson/responseJson */\n method?: string;\n /** @deprecated Use toolName */\n tool?: string;\n /** @deprecated Use durationMs */\n duration?: number;\n /** @deprecated Use status/errorMessage fields */\n errorType?: string;\n /** @deprecated May be encoded in requestJson/responseJson */\n metadata?: Record<string, unknown>;\n}\n\nexport interface ListTracesResponse {\n items: Trace[];\n nextCursor?: string;\n}\n\nexport interface TraceResponse {\n trace: Trace;\n events: TraceEvent[];\n}\n\nexport interface McpEvent {\n id: string;\n createdAt: string;\n agentId: string;\n integrationId: string | null;\n toolName: string | null;\n eventType: string;\n status: string;\n}\n\nexport interface McpEventListResponse {\n items: McpEvent[];\n}\n\n/**\n * @deprecated Use McpEventListResponse instead.\n */\nexport type ListEventsResponse = McpEventListResponse;\n\nexport interface TraceStats {\n totalTraces: number;\n totalEvents: number;\n eventCounts: { ok: number; warn: number; error: number };\n errorRate: number;\n latency: { avg: number; p50: number; p95: number; p99: number };\n bytesTransferred: { in: number; out: number };\n errorsByType: Array<{ type: string; count: number; percentage: number }>;\n topTools: Array<{ name: string; count: number; avgDuration: number }>;\n timeline: Array<{\n date: string;\n traceCount: number;\n eventCount: number;\n warnCount: number;\n errorCount: number;\n bytesIn: number;\n bytesOut: number;\n }>;\n}\n\nexport interface TraceStatsResponse {\n stats: TraceStats;\n}\n\n// ============================================================================\n// Pagination\n// ============================================================================\n\nexport interface PaginationParams {\n cursor?: string;\n limit?: number;\n}\n\n// ============================================================================\n// OAuth Tokens (for storage)\n// ============================================================================\n\nexport interface OAuthTokens {\n accessToken: string;\n refreshToken?: string;\n tokenType: string;\n scope?: string;\n expiresAt?: string;\n}\n\n// ============================================================================\n// Token Exchange (RFC 8693)\n// ============================================================================\n\n/**\n * RFC 8693 Token Exchange grant type\n */\nexport const TOKEN_EXCHANGE_GRANT_TYPE =\n \"urn:ietf:params:oauth:grant-type:token-exchange\";\n\n/**\n * RFC 8693 token type identifier for access tokens\n */\nexport const TOKEN_TYPE_ACCESS_TOKEN =\n \"urn:ietf:params:oauth:token-type:access_token\";\n\n/**\n * Request body for RFC 8693 token exchange\n */\nexport interface TokenExchangeRequest {\n grant_type: typeof TOKEN_EXCHANGE_GRANT_TYPE;\n subject_token: string;\n subject_token_type?: string;\n resource: string;\n scope?: string;\n audience?: string;\n}\n\n/**\n * Response from RFC 8693 token exchange\n */\nexport interface TokenExchangeResponse {\n access_token: string;\n issued_token_type: string;\n token_type: string;\n expires_in?: number;\n scope?: string;\n refresh_token?: string;\n}\n\n// ============================================================================\n// Client Configuration\n// ============================================================================\n\nexport interface KontextManagementClientConfig {\n /**\n * Base URL for the Kontext API (e.g., \"https://api.kontext.dev\")\n */\n baseUrl: string;\n\n /**\n * API version to use (default: \"v1\")\n */\n apiVersion?: string;\n\n /**\n * OAuth token endpoint URL (optional)\n * If not specified, defaults to `${baseUrl}/oauth2/token`\n * Useful for local development where Hydra runs on a different port\n */\n tokenUrl?: string;\n\n /**\n * OAuth scopes to request (optional)\n * Defaults to [\"management:all\"]\n */\n scopes?: string[];\n\n /**\n * OAuth audience for token requests (optional)\n * If not specified, defaults to `${baseUrl}/api/${apiVersion}`\n * Required for Hydra token introspection\n */\n audience?: string;\n\n /**\n * Service account credentials for authentication\n */\n credentials: {\n clientId: string;\n clientSecret: string;\n };\n}\n"]}
1
+ {"version":3,"sources":["../../src/errors.ts","../../src/management/auth.ts","../../src/management/http.ts","../../src/management/service-accounts.ts","../../src/management/applications.ts","../../src/management/integrations.ts","../../src/management/agent-sessions.ts","../../src/management/traces.ts","../../src/management/client.ts","../../src/management/types.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Typed error classes for the Kontext SDK.\n *\n * Every error has a `kontext_` prefixed code, an auto-generated docsUrl,\n * and a `kontextError` brand for type narrowing without instanceof.\n *\n * @packageDocumentation\n */\n\n// ============================================================================\n// Base\n// ============================================================================\n\n/**\n * Base error class for all Kontext SDK errors.\n *\n * @example\n * ```typescript\n * import { isKontextError } from '@kontext-dev/js-sdk';\n *\n * try {\n * await client.connect();\n * } catch (err) {\n * if (isKontextError(err)) {\n * console.log(err.code); // \"kontext_authorization_required\"\n * console.log(err.docsUrl); // \"https://docs.kontext.dev/errors/kontext_authorization_required\"\n * }\n * }\n * ```\n */\nexport class KontextError extends Error {\n /** Brand field for type narrowing without instanceof */\n readonly kontextError = true as const;\n\n /** Machine-readable error code, always prefixed with `kontext_` */\n readonly code: string;\n\n /** HTTP status code when applicable */\n readonly statusCode?: number;\n\n /** Auto-generated link to error documentation */\n readonly docsUrl: string;\n\n /** Server request ID for debugging / support escalation */\n readonly requestId?: string;\n\n /** Contextual metadata bag (integration IDs, param names, etc.) */\n readonly meta: Record<string, unknown>;\n\n constructor(\n message: string,\n code: string,\n options?: {\n statusCode?: number;\n requestId?: string;\n meta?: Record<string, unknown>;\n cause?: unknown;\n },\n ) {\n super(message, { cause: options?.cause });\n this.name = \"KontextError\";\n this.code = code;\n this.statusCode = options?.statusCode;\n this.requestId = options?.requestId;\n this.meta = options?.meta ?? {};\n this.docsUrl = `https://docs.kontext.dev/errors/${code}`;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n statusCode: this.statusCode,\n docsUrl: this.docsUrl,\n requestId: this.requestId,\n meta: Object.keys(this.meta).length > 0 ? this.meta : undefined,\n };\n }\n\n override toString(): string {\n const parts = [`[${this.code}] ${this.message}`];\n if (this.docsUrl) parts.push(`Docs: ${this.docsUrl}`);\n if (this.requestId) parts.push(`Request ID: ${this.requestId}`);\n return parts.join(\"\\n\");\n }\n}\n\n// ============================================================================\n// Type guard\n// ============================================================================\n\n/**\n * Check if an error is a KontextError without instanceof.\n * Works across package versions and bundler deduplication.\n */\nexport function isKontextError(err: unknown): err is KontextError {\n return (\n typeof err === \"object\" &&\n err !== null &&\n (err as Record<string, unknown>).kontextError === true\n );\n}\n\n// ============================================================================\n// Auth errors\n// ============================================================================\n\n/**\n * Thrown when authentication is required but no valid credentials are available.\n */\nexport class AuthorizationRequiredError extends KontextError {\n readonly authorizationUrl?: string;\n\n constructor(\n message = \"Authorization required. Complete the OAuth flow to continue.\",\n options?: {\n authorizationUrl?: string;\n requestId?: string;\n meta?: Record<string, unknown>;\n cause?: unknown;\n },\n ) {\n super(message, \"kontext_authorization_required\", {\n statusCode: 401,\n ...options,\n });\n this.name = \"AuthorizationRequiredError\";\n this.authorizationUrl = options?.authorizationUrl;\n }\n}\n\n// ============================================================================\n// OAuth errors\n// ============================================================================\n\n/**\n * Thrown when an OAuth flow fails — state validation, token exchange,\n * missing code verifier, or provider errors.\n */\nexport class OAuthError extends KontextError {\n readonly errorCode?: string;\n readonly errorDescription?: string;\n\n constructor(\n message: string,\n code: string,\n options?: {\n statusCode?: number;\n errorCode?: string;\n errorDescription?: string;\n requestId?: string;\n meta?: Record<string, unknown>;\n cause?: unknown;\n },\n ) {\n super(message, code, {\n statusCode: options?.statusCode ?? 400,\n ...options,\n });\n this.name = \"OAuthError\";\n this.errorCode = options?.errorCode;\n this.errorDescription = options?.errorDescription;\n }\n}\n\n// ============================================================================\n// Integration errors\n// ============================================================================\n\n/**\n * Thrown when an integration connection is required before a tool can be used.\n */\nexport class IntegrationConnectionRequiredError extends KontextError {\n readonly integrationId: string;\n readonly integrationName?: string;\n readonly connectUrl?: string;\n\n constructor(\n integrationId: string,\n options?: {\n integrationName?: string;\n connectUrl?: string;\n message?: string;\n requestId?: string;\n meta?: Record<string, unknown>;\n cause?: unknown;\n },\n ) {\n super(\n options?.message ??\n `Connection to integration \"${integrationId}\" is required. Visit the connect URL to authorize.`,\n \"kontext_integration_connection_required\",\n { statusCode: 403, ...options },\n );\n this.name = \"IntegrationConnectionRequiredError\";\n this.integrationId = integrationId;\n this.integrationName = options?.integrationName;\n this.connectUrl = options?.connectUrl;\n }\n}\n\n// ============================================================================\n// Config errors (NEW — replaces all plain Error config throws)\n// ============================================================================\n\n/**\n * Thrown when SDK configuration is invalid or missing.\n * These are deterministic errors caught at initialization time.\n */\nexport class ConfigError extends KontextError {\n constructor(\n message: string,\n code: string,\n options?: {\n meta?: Record<string, unknown>;\n cause?: unknown;\n },\n ) {\n super(message, code, options);\n this.name = \"ConfigError\";\n }\n}\n\n// ============================================================================\n// Network errors\n// ============================================================================\n\n/**\n * Thrown when there is a network or connection error.\n */\nexport class NetworkError extends KontextError {\n constructor(\n message = \"Network error. Check your internet connection and that the server is reachable.\",\n options?: {\n cause?: unknown;\n requestId?: string;\n meta?: Record<string, unknown>;\n },\n ) {\n super(message, \"kontext_network_error\", options);\n this.name = \"NetworkError\";\n }\n}\n\n// ============================================================================\n// HTTP response errors (differentiated by code)\n// ============================================================================\n\n/**\n * Thrown when the server returns an HTTP error.\n * Use `error.code` to distinguish between specific error types.\n */\nexport class HttpError extends KontextError {\n readonly retryAfter?: number;\n readonly validationErrors?: Array<{ field: string; message: string }>;\n\n constructor(\n message: string,\n code: string,\n options?: {\n statusCode?: number;\n retryAfter?: number;\n validationErrors?: Array<{ field: string; message: string }>;\n requestId?: string;\n meta?: Record<string, unknown>;\n cause?: unknown;\n },\n ) {\n super(message, code, {\n statusCode: options?.statusCode,\n ...options,\n });\n this.name = \"HttpError\";\n this.retryAfter = options?.retryAfter;\n this.validationErrors = options?.validationErrors;\n }\n}\n\n// ============================================================================\n// Network error detection (used by translateError)\n// ============================================================================\n\n/**\n * Safely access arbitrary properties on an error object.\n * Errors in JS frequently carry extra properties (code, statusCode, etc.)\n * that aren't part of the Error interface. This avoids `as unknown as` casts.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction errorProps(err: Error): Record<string, any> {\n return err;\n}\n\nconst NETWORK_ERROR_CODES = new Set([\n \"ECONNREFUSED\",\n \"ENOTFOUND\",\n \"ETIMEDOUT\",\n \"ECONNRESET\",\n \"ECONNABORTED\",\n \"EPIPE\",\n \"UND_ERR_CONNECT_TIMEOUT\",\n]);\n\n/**\n * Detect network errors structurally rather than by string matching.\n * Checks Node.js system error codes on the error and its cause.\n */\nexport function isNetworkError(err: Error): boolean {\n if (err.name === \"AbortError\") return true;\n\n const props = errorProps(err);\n const sysCode = props.code as string | undefined;\n if (typeof sysCode === \"string\" && NETWORK_ERROR_CODES.has(sysCode))\n return true;\n\n // fetch() throws TypeError — only classify as network error when cause\n // indicates a system-level failure\n if (err.name === \"TypeError\" && err.cause instanceof Error) {\n const causeCode = errorProps(err.cause).code;\n if (typeof causeCode === \"string\" && NETWORK_ERROR_CODES.has(causeCode))\n return true;\n }\n\n return false;\n}\n\n/**\n * Detect unauthorized errors structurally.\n * Checks status code and numeric code rather than string matching on name.\n */\nexport function isUnauthorizedError(err: Error): boolean {\n const props = errorProps(err);\n\n // Check HTTP status code (most reliable)\n if (props.statusCode === 401 || props.status === 401) return true;\n\n // Check MCP SDK UnauthorizedError by name (last resort, but needed for\n // MCP SDK errors which don't set statusCode)\n if (err.name === \"UnauthorizedError\") return true;\n if (err.message === \"Unauthorized\") return true;\n\n return false;\n}\n\n// ============================================================================\n// Elicitation types\n// ============================================================================\n\nexport interface ElicitationEntry {\n readonly url: string;\n readonly message: string;\n readonly elicitationId: string;\n readonly integrationId?: string;\n readonly integrationName?: string;\n}\n\n// ============================================================================\n// HTTP error parsing\n// ============================================================================\n\n/**\n * Parse an HTTP response into an appropriate error.\n */\nexport function parseHttpError(\n statusCode: number,\n body?: unknown,\n): KontextError {\n const message =\n typeof body === \"object\" && body !== null && \"message\" in body\n ? String((body as { message: unknown }).message)\n : `HTTP ${statusCode}`;\n\n const errorCode =\n typeof body === \"object\" && body !== null && \"code\" in body\n ? String((body as { code: unknown }).code)\n : undefined;\n\n switch (statusCode) {\n case 400:\n if (\n typeof body === \"object\" &&\n body !== null &&\n \"errors\" in body &&\n Array.isArray((body as { errors: unknown }).errors)\n ) {\n return new HttpError(message, \"kontext_validation_error\", {\n statusCode: 400,\n validationErrors: (\n body as { errors: Array<{ field: string; message: string }> }\n ).errors,\n });\n }\n return new KontextError(message, errorCode ?? \"kontext_bad_request\", {\n statusCode: 400,\n });\n\n case 401:\n return new AuthorizationRequiredError(message);\n\n case 403:\n if (errorCode === \"INTEGRATION_CONNECTION_REQUIRED\") {\n const details = body as {\n integrationId?: string;\n integrationName?: string;\n connectUrl?: string;\n };\n return new IntegrationConnectionRequiredError(\n details.integrationId ?? \"unknown\",\n {\n integrationName: details.integrationName,\n connectUrl: details.connectUrl,\n message,\n },\n );\n }\n return new HttpError(message, \"kontext_policy_denied\", {\n statusCode: 403,\n meta: { policy: (body as Record<string, unknown>)?.policy },\n });\n\n case 404:\n return new HttpError(message, \"kontext_not_found\", { statusCode: 404 });\n\n case 429: {\n const retryAfter =\n typeof body === \"object\" && body !== null && \"retryAfter\" in body\n ? Number((body as { retryAfter: unknown }).retryAfter)\n : undefined;\n return new HttpError(\n retryAfter\n ? `Rate limit exceeded. Retry after ${retryAfter} seconds.`\n : \"Rate limit exceeded. Wait and retry.\",\n \"kontext_rate_limited\",\n { statusCode: 429, retryAfter },\n );\n }\n\n default:\n if (statusCode >= 500) {\n return new HttpError(\n `Server error (HTTP ${statusCode}): ${message}`,\n \"kontext_server_error\",\n { statusCode },\n );\n }\n return new KontextError(message, errorCode ?? \"kontext_unknown_error\", {\n statusCode,\n });\n }\n}\n","/**\n * Service account authentication using OAuth 2.0 client_credentials flow\n */\n\nimport {\n AuthorizationRequiredError,\n NetworkError,\n OAuthError,\n} from \"../errors.js\";\n\nexport interface ServiceAccountCredentials {\n clientId: string;\n clientSecret: string;\n}\n\nexport interface AccessToken {\n accessToken: string;\n tokenType: string;\n expiresAt: Date | null;\n scope?: string;\n}\n\ninterface TokenResponse {\n access_token: string;\n token_type: string;\n expires_in?: number;\n scope?: string;\n}\n\n/**\n * Authenticates using the OAuth 2.0 client_credentials grant\n * @param tokenUrl The token endpoint URL\n * @param credentials Service account client credentials\n * @param scopes Optional scopes to request\n * @param audience Optional audience for the token\n * @returns Access token response\n */\nexport async function authenticateServiceAccount(\n tokenUrl: string,\n credentials: ServiceAccountCredentials,\n scopes?: string[],\n audience?: string,\n): Promise<AccessToken> {\n const params = new URLSearchParams({\n grant_type: \"client_credentials\",\n });\n\n if (scopes && scopes.length > 0) {\n params.set(\"scope\", scopes.join(\" \"));\n }\n\n // Hydra requires audience at token request time for introspection\n if (audience) {\n params.set(\"audience\", audience);\n }\n\n // Use HTTP Basic Auth for client credentials (client_secret_basic)\n const basicAuth = Buffer.from(\n `${credentials.clientId}:${credentials.clientSecret}`,\n ).toString(\"base64\");\n\n let response: Response;\n try {\n response = await fetch(tokenUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n Accept: \"application/json\",\n Authorization: `Basic ${basicAuth}`,\n },\n body: params.toString(),\n });\n } catch (err) {\n throw new NetworkError(\"Failed to connect to token endpoint\", {\n cause: err instanceof Error ? err : undefined,\n });\n }\n\n if (!response.ok) {\n let errorBody: unknown;\n try {\n errorBody = await response.json();\n } catch {\n errorBody = await response.text();\n }\n\n if (response.status === 401) {\n throw new AuthorizationRequiredError(\n \"Invalid service account credentials\",\n );\n }\n\n const errorCode =\n typeof errorBody === \"object\" &&\n errorBody !== null &&\n \"error\" in errorBody\n ? String((errorBody as { error: unknown }).error)\n : \"unknown_error\";\n\n const errorDescription =\n typeof errorBody === \"object\" &&\n errorBody !== null &&\n \"error_description\" in errorBody\n ? String(\n (errorBody as { error_description: unknown }).error_description,\n )\n : undefined;\n\n throw new OAuthError(\n errorDescription ?? `Token request failed: ${errorCode}`,\n \"kontext_oauth_token_exchange_failed\",\n { errorCode, errorDescription },\n );\n }\n\n const tokenData = (await response.json()) as TokenResponse;\n\n return {\n accessToken: tokenData.access_token,\n tokenType: tokenData.token_type,\n expiresAt: tokenData.expires_in\n ? new Date(Date.now() + tokenData.expires_in * 1000)\n : null,\n scope: tokenData.scope,\n };\n}\n\n/**\n * Token manager for automatic token refresh\n */\nexport class TokenManager {\n private token: AccessToken | null = null;\n private tokenPromise: Promise<AccessToken> | null = null;\n private readonly bufferSeconds = 60; // Refresh 60 seconds before expiry\n\n constructor(\n private readonly tokenUrl: string,\n private readonly credentials: ServiceAccountCredentials,\n private readonly scopes?: string[],\n private readonly audience?: string,\n ) {}\n\n /**\n * Get a valid access token, refreshing if necessary\n */\n async getAccessToken(): Promise<string> {\n // If we have a valid token, return it\n if (this.token && !this.isExpired(this.token)) {\n return this.token.accessToken;\n }\n\n if (!this.tokenPromise) {\n this.tokenPromise = this.refresh().finally(() => {\n this.tokenPromise = null;\n });\n }\n\n const token = await this.tokenPromise;\n return token.accessToken;\n }\n\n /**\n * Force a token refresh\n */\n async refresh(): Promise<AccessToken> {\n this.token = await authenticateServiceAccount(\n this.tokenUrl,\n this.credentials,\n this.scopes,\n this.audience,\n );\n return this.token;\n }\n\n /**\n * Clear the cached token\n */\n clear(): void {\n this.token = null;\n this.tokenPromise = null;\n }\n\n private isExpired(token: AccessToken): boolean {\n if (!token.expiresAt) {\n return false;\n }\n const bufferMs = this.bufferSeconds * 1000;\n return Date.now() >= token.expiresAt.getTime() - bufferMs;\n }\n}\n","/**\n * HTTP client utilities for the Management API\n */\n\nimport { NetworkError, parseHttpError } from \"../errors.js\";\nimport type { PaginationParams } from \"./types.js\";\nimport type { TokenManager } from \"./auth.js\";\n\nexport interface HttpClientConfig {\n baseUrl: string;\n apiVersion: string;\n tokenManager: TokenManager;\n}\n\n/**\n * Internal HTTP client for making authenticated API requests\n */\nexport class HttpClient {\n private readonly baseUrl: string;\n\n constructor(private readonly config: HttpClientConfig) {\n // Ensure baseUrl doesn't end with a slash\n this.baseUrl = `${config.baseUrl.replace(/\\/$/, \"\")}/api/${config.apiVersion}`;\n }\n\n /**\n * Make a GET request\n */\n async get<T>(\n path: string,\n params?: Record<string, string | number | undefined>,\n ): Promise<T> {\n const url = this.buildUrl(path, params);\n return this.request<T>(\"GET\", url, undefined, true);\n }\n\n /**\n * Make a POST request\n */\n async post<T>(path: string, body?: unknown): Promise<T> {\n const url = this.buildUrl(path);\n return this.request<T>(\"POST\", url, body, true);\n }\n\n /**\n * Make a POST request without expecting a response body\n */\n async postNoContent(path: string, body?: unknown): Promise<void> {\n const url = this.buildUrl(path);\n await this.request(\"POST\", url, body, false);\n }\n\n /**\n * Make a PUT request\n */\n async put<T>(path: string, body?: unknown): Promise<T> {\n const url = this.buildUrl(path);\n return this.request<T>(\"PUT\", url, body, true);\n }\n\n /**\n * Make a PATCH request\n */\n async patch<T>(path: string, body?: unknown): Promise<T> {\n const url = this.buildUrl(path);\n return this.request<T>(\"PATCH\", url, body, true);\n }\n\n /**\n * Make a DELETE request\n */\n async delete(path: string): Promise<void> {\n const url = this.buildUrl(path);\n await this.request(\"DELETE\", url, undefined, false);\n }\n\n /**\n * Make a DELETE request expecting a response body\n */\n async deleteJson<T>(path: string): Promise<T> {\n const url = this.buildUrl(path);\n return this.request<T>(\"DELETE\", url, undefined, true);\n }\n\n private buildUrl(\n path: string,\n params?: Record<string, string | number | undefined>,\n ): string {\n // Remove leading slash from path to properly join with baseUrl\n const normalizedPath = path.startsWith(\"/\") ? path.slice(1) : path;\n const url = new URL(normalizedPath, this.baseUrl + \"/\");\n if (params) {\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n return url.toString();\n }\n\n private async request<T>(\n method: string,\n url: string,\n body: unknown | undefined,\n expectBody: true,\n ): Promise<T>;\n private async request(\n method: string,\n url: string,\n body: unknown | undefined,\n expectBody: false,\n ): Promise<void>;\n private async request<T>(\n method: string,\n url: string,\n body: unknown | undefined,\n expectBody: boolean,\n ): Promise<T | void> {\n const accessToken = await this.config.tokenManager.getAccessToken();\n\n const headers: Record<string, string> = {\n Authorization: `Bearer ${accessToken}`,\n Accept: \"application/json\",\n };\n\n if (body !== undefined) {\n headers[\"Content-Type\"] = \"application/json\";\n }\n\n let response: Response;\n try {\n response = await fetch(url, {\n method,\n headers,\n body: body !== undefined ? JSON.stringify(body) : undefined,\n });\n } catch (err) {\n throw new NetworkError(`Request to ${url} failed`, {\n cause: err instanceof Error ? err : undefined,\n });\n }\n\n // Handle empty responses (204 No Content)\n if (response.status === 204) {\n if (expectBody) {\n throw new NetworkError(\n `Expected response body but got 204 from ${url}`,\n );\n }\n return;\n }\n\n let responseBody: unknown;\n if (expectBody || !response.ok) {\n const contentType = response.headers.get(\"content-type\");\n if (contentType?.includes(\"application/json\")) {\n try {\n responseBody = await response.json();\n } catch {\n responseBody = undefined;\n }\n } else {\n responseBody = await response.text();\n }\n }\n\n if (!response.ok) {\n throw parseHttpError(response.status, responseBody);\n }\n\n if (!expectBody) {\n return;\n }\n\n return responseBody as T;\n }\n}\n\n/**\n * Convert pagination params to query params\n */\nexport function paginationToParams(\n pagination?: PaginationParams,\n): Record<string, string | number | undefined> {\n return {\n cursor: pagination?.cursor,\n limit: pagination?.limit,\n };\n}\n","/**\n * Service Accounts resource methods\n */\n\nimport type {\n CreateServiceAccountInput,\n CreateServiceAccountResponse,\n ListServiceAccountsResponse,\n PaginationParams,\n RotateSecretResponse,\n ServiceAccountResponse,\n} from \"./types.js\";\nimport type { HttpClient } from \"./http.js\";\nimport { paginationToParams } from \"./http.js\";\n\n/**\n * Service Accounts API methods\n */\nexport class ServiceAccountsResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Create a new service account\n * @param input Service account creation parameters\n * @returns The created service account with credentials\n */\n async create(\n input: CreateServiceAccountInput,\n ): Promise<CreateServiceAccountResponse> {\n return this.http.post<CreateServiceAccountResponse>(\n \"/service-accounts\",\n input,\n );\n }\n\n /**\n * List all service accounts\n * @param pagination Optional pagination parameters\n * @returns List of service accounts\n */\n async list(\n pagination?: PaginationParams,\n ): Promise<ListServiceAccountsResponse> {\n return this.http.get<ListServiceAccountsResponse>(\n \"/service-accounts\",\n paginationToParams(pagination),\n );\n }\n\n /**\n * Get a service account by ID\n * @param id Service account ID\n * @returns The service account\n */\n async get(id: string): Promise<ServiceAccountResponse> {\n return this.http.get<ServiceAccountResponse>(`/service-accounts/${id}`);\n }\n\n /**\n * Rotate a service account's client secret\n * @param id Service account ID\n * @returns New credentials\n */\n async rotateSecret(id: string): Promise<RotateSecretResponse> {\n return this.http.post<RotateSecretResponse>(\n `/service-accounts/${id}/rotate-secret`,\n );\n }\n\n /**\n * Revoke (delete) a service account\n * @param id Service account ID\n */\n async revoke(id: string): Promise<void> {\n await this.http.delete(`/service-accounts/${id}`);\n }\n}\n","/**\n * Applications resource methods\n */\n\nimport type {\n ApplicationIntegrationsResponse,\n ApplicationOAuthResponse,\n ApplicationResponse,\n CreateApplicationInput,\n CreateApplicationResponse,\n ListApplicationsResponse,\n PaginationParams,\n RevokeAllSessionsResponse,\n RotateApplicationSecretResponse,\n UpdateApplicationInput,\n UpdateApplicationIntegrationsInput,\n UpdateApplicationOAuthInput,\n} from \"./types.js\";\nimport type { HttpClient } from \"./http.js\";\nimport { paginationToParams } from \"./http.js\";\n\n/**\n * Applications API methods\n */\nexport class ApplicationsResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Create a new application\n * @param input Application creation parameters\n * @returns The created application with OAuth config\n */\n async create(\n input: CreateApplicationInput,\n ): Promise<CreateApplicationResponse> {\n return this.http.post<CreateApplicationResponse>(\"/applications\", input);\n }\n\n /**\n * List all applications\n * @param pagination Optional pagination parameters\n * @returns List of applications\n */\n async list(pagination?: PaginationParams): Promise<ListApplicationsResponse> {\n return this.http.get<ListApplicationsResponse>(\n \"/applications\",\n paginationToParams(pagination),\n );\n }\n\n /**\n * Get an application by ID\n * @param id Application ID\n * @returns The application\n */\n async get(id: string): Promise<ApplicationResponse> {\n return this.http.get<ApplicationResponse>(`/applications/${id}`);\n }\n\n /**\n * Update an application\n * @param id Application ID\n * @param input Update parameters\n * @returns The updated application\n */\n async update(\n id: string,\n input: UpdateApplicationInput,\n ): Promise<ApplicationResponse> {\n return this.http.patch<ApplicationResponse>(`/applications/${id}`, input);\n }\n\n /**\n * Archive an application (soft delete)\n * @param id Application ID\n */\n async archive(id: string): Promise<void> {\n await this.http.delete(`/applications/${id}`);\n }\n\n /**\n * Get an application's OAuth configuration\n * @param id Application ID\n * @returns The OAuth configuration\n */\n async getOAuth(id: string): Promise<ApplicationOAuthResponse> {\n return this.http.get<ApplicationOAuthResponse>(`/applications/${id}/oauth`);\n }\n\n /**\n * Update an application's OAuth configuration\n * @param id Application ID\n * @param input OAuth update parameters\n * @returns The updated OAuth configuration\n */\n async updateOAuth(\n id: string,\n input: UpdateApplicationOAuthInput,\n ): Promise<ApplicationOAuthResponse> {\n return this.http.patch<ApplicationOAuthResponse>(\n `/applications/${id}/oauth`,\n input,\n );\n }\n\n /**\n * Rotate an application's client secret (confidential clients only)\n * @param id Application ID\n * @returns The new OAuth configuration with new secret\n */\n async rotateSecret(id: string): Promise<RotateApplicationSecretResponse> {\n return this.http.post<RotateApplicationSecretResponse>(\n `/applications/${id}/rotate-secret`,\n );\n }\n\n /**\n * List integrations attached to an application\n * @param id Application ID\n * @returns List of integration IDs\n */\n async listIntegrations(id: string): Promise<ApplicationIntegrationsResponse> {\n return this.http.get<ApplicationIntegrationsResponse>(\n `/applications/${id}/integrations`,\n );\n }\n\n /**\n * Set the integrations attached to an application (replaces all)\n * @param id Application ID\n * @param input Integration IDs to attach\n * @returns Updated list of integration IDs\n */\n async setIntegrations(\n id: string,\n input: UpdateApplicationIntegrationsInput,\n ): Promise<ApplicationIntegrationsResponse> {\n return this.http.put<ApplicationIntegrationsResponse>(\n `/applications/${id}/integrations`,\n input,\n );\n }\n\n /**\n * Attach a single integration to an application\n * @param id Application ID\n * @param integrationId Integration ID to attach\n */\n async attachIntegration(id: string, integrationId: string): Promise<void> {\n await this.http.postNoContent(\n `/applications/${id}/integrations/${integrationId}`,\n );\n }\n\n /**\n * Detach a single integration from an application\n * @param id Application ID\n * @param integrationId Integration ID to detach\n */\n async detachIntegration(id: string, integrationId: string): Promise<void> {\n await this.http.delete(`/applications/${id}/integrations/${integrationId}`);\n }\n\n /**\n * Revoke all agent sessions for an application\n * @param id Application ID\n */\n async revokeAllAgentSessions(id: string): Promise<RevokeAllSessionsResponse> {\n return this.http.deleteJson<RevokeAllSessionsResponse>(\n `/applications/${id}/sessions`,\n );\n }\n}\n","/**\n * Integrations resource methods\n */\n\nimport type {\n CreateIntegrationInput,\n CreateIntegrationResponse,\n IntegrationResponse,\n ListIntegrationsResponse,\n PaginationParams,\n UpdateIntegrationInput,\n ValidateIntegrationResponse,\n} from \"./types.js\";\nimport type { HttpClient } from \"./http.js\";\nimport { paginationToParams } from \"./http.js\";\n\n/**\n * Integrations API methods\n */\nexport class IntegrationsResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Create a new integration\n * @param input Integration creation parameters\n * @returns The created integration\n */\n async create(\n input: CreateIntegrationInput,\n ): Promise<CreateIntegrationResponse> {\n return this.http.post<CreateIntegrationResponse>(\"/integrations\", input);\n }\n\n /**\n * List all integrations\n * @param pagination Optional pagination parameters\n * @returns List of integrations\n */\n async list(pagination?: PaginationParams): Promise<ListIntegrationsResponse> {\n return this.http.get<ListIntegrationsResponse>(\n \"/integrations\",\n paginationToParams(pagination),\n );\n }\n\n /**\n * Get an integration by ID\n * @param id Integration ID\n * @returns The integration\n */\n async get(id: string): Promise<IntegrationResponse> {\n return this.http.get<IntegrationResponse>(`/integrations/${id}`);\n }\n\n /**\n * Update an integration\n * @param id Integration ID\n * @param input Update parameters\n * @returns The updated integration\n */\n async update(\n id: string,\n input: UpdateIntegrationInput,\n ): Promise<IntegrationResponse> {\n return this.http.patch<IntegrationResponse>(`/integrations/${id}`, input);\n }\n\n /**\n * Archive an integration (soft delete)\n * @param id Integration ID\n */\n async archive(id: string): Promise<void> {\n await this.http.delete(`/integrations/${id}`);\n }\n\n /**\n * Validate an integration (test connectivity)\n * @param id Integration ID\n * @returns Validation result\n */\n async validate(id: string): Promise<ValidateIntegrationResponse> {\n return this.http.post<ValidateIntegrationResponse>(\n `/integrations/${id}/validate`,\n );\n }\n}\n","/**\n * Agent Sessions resource methods\n */\n\nimport type {\n AgentSessionResponse,\n ListAgentSessionsResponse,\n RevokeAllSessionsResponse,\n} from \"./types.js\";\nimport type { HttpClient } from \"./http.js\";\n\nexport interface ListAgentSessionsParams {\n /** Include inactive sessions (disconnected/expired) */\n includeInactive?: boolean;\n /** Filter by status; \"all\" or \"inactive\" enables includeInactive */\n status?: \"active\" | \"inactive\" | \"all\";\n /** Limit number of sessions returned */\n limit?: number;\n}\n\n/**\n * Agent Sessions API methods\n */\nexport class AgentSessionsResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * List all agent sessions\n * @param params Optional filter and pagination parameters\n * @returns List of agent sessions\n */\n async list(\n applicationId: string,\n params?: ListAgentSessionsParams,\n ): Promise<ListAgentSessionsResponse> {\n return this.http.get<ListAgentSessionsResponse>(\n `/applications/${applicationId}/sessions`,\n {\n status: params?.status,\n includeInactive: params?.includeInactive ? \"true\" : undefined,\n limit: params?.limit,\n },\n );\n }\n\n /**\n * Get an agent session by ID\n * @param id Agent session ID\n * @returns The agent session\n */\n async get(\n applicationId: string,\n sessionId: string,\n ): Promise<AgentSessionResponse> {\n return this.http.get<AgentSessionResponse>(\n `/applications/${applicationId}/sessions/${sessionId}`,\n );\n }\n\n /**\n * Revoke all sessions for an application\n */\n async revokeAll(applicationId: string): Promise<RevokeAllSessionsResponse> {\n return this.http.deleteJson<RevokeAllSessionsResponse>(\n `/applications/${applicationId}/sessions`,\n );\n }\n}\n","/**\n * Traces and Events resource methods\n */\n\nimport type {\n McpEventListResponse,\n ListTracesResponse,\n TraceEvent,\n PaginationParams,\n TraceResponse,\n TraceStatsResponse,\n} from \"./types.js\";\nimport type { HttpClient } from \"./http.js\";\n\nexport interface ListTracesParams extends PaginationParams {\n /** Filter by owner user ID (admin/owner only) */\n userId?: string;\n /** Filter by agent/application ID */\n agentId?: string;\n /** Filter by application ID (legacy alias for agentId) */\n applicationId?: string;\n /** Filter by agent session ID */\n sessionId?: string;\n /** Offset for pagination */\n offset?: number;\n /** @deprecated No longer supported by the API */\n startAfter?: string;\n /** @deprecated No longer supported by the API */\n startBefore?: string;\n}\n\nexport interface ListEventsParams extends PaginationParams {\n /** Maximum number of events to return (default: 100, max: 200) */\n limit?: number;\n}\n\nexport interface TraceStatsParams {\n /** Period window (\"1d\", \"7d\", \"30d\") */\n period?: string;\n /** Filter by owner user ID (admin/owner only) */\n userId?: string;\n /** @deprecated No longer supported by the API */\n applicationId?: string;\n /** @deprecated Legacy input; mapped to period when possible */\n startTime?: string;\n /** @deprecated Legacy input; currently unused */\n endTime?: string;\n}\n\n/**\n * Traces API methods\n */\nexport class TracesResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * List traces\n * @param params Optional filter and pagination parameters\n * @returns List of traces\n */\n async list(params?: ListTracesParams): Promise<ListTracesResponse> {\n const agentId = params?.agentId ?? params?.applicationId;\n const offsetFromCursor =\n params?.cursor && !Number.isNaN(Number(params.cursor))\n ? Number(params.cursor)\n : undefined;\n\n return this.http.get<ListTracesResponse>(\"/traces\", {\n limit: params?.limit,\n offset: params?.offset ?? offsetFromCursor,\n userId: params?.userId,\n sessionId: params?.sessionId,\n agentId,\n });\n }\n\n /**\n * Get a trace by ID with its events\n * @param id Trace ID\n * @returns The trace with events\n */\n async get(id: string, params?: { userId?: string }): Promise<TraceResponse> {\n const response = await this.http.get<\n | TraceResponse\n | {\n events: TraceEvent[];\n }\n >(`/traces/${id}`, {\n userId: params?.userId,\n });\n\n if (\"trace\" in response && response.trace) {\n return response;\n }\n\n const events = response.events ?? [];\n const first = events[0];\n const last = events.length > 0 ? events[events.length - 1] : undefined;\n const traceId = first?.traceId ?? id;\n const sessionId = first?.sessionId ?? \"\";\n const okCount = events.filter((event) => event.status === \"ok\").length;\n const warnCount = events.filter((event) => event.status === \"warn\").length;\n const errorCount = events.filter((event) =>\n [\"error_remote\", \"error_proxy\", \"error_auth\", \"error\"].includes(\n event.status,\n ),\n ).length;\n\n return {\n trace: {\n traceId,\n sessionId,\n startedAt: first?.createdAt ?? null,\n endedAt: last?.createdAt ?? null,\n eventCount: events.length,\n okCount,\n warnCount,\n errorCount,\n agentId: first?.agentId,\n agentSessionId: first?.agentSessionId ?? undefined,\n },\n events,\n };\n }\n\n /**\n * Get trace statistics\n * @param params Optional filter parameters\n * @returns Trace statistics\n */\n async stats(params?: TraceStatsParams): Promise<TraceStatsResponse> {\n const period =\n params?.period ??\n (params?.startTime\n ? inferPeriodFromStartTime(params.startTime)\n : undefined);\n\n const response = await this.http.get<\n TraceStatsResponse | TraceStatsResponse[\"stats\"]\n >(\"/traces/stats\", {\n period,\n userId: params?.userId,\n });\n\n if (\"stats\" in response) {\n return response;\n }\n\n return { stats: response };\n }\n}\n\n/**\n * Events API methods\n */\nexport class EventsResource {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * List events\n * @param params Optional filter and pagination parameters\n * @returns List of events\n */\n async list(params?: ListEventsParams): Promise<McpEventListResponse> {\n return this.http.get<McpEventListResponse>(\"/mcp-events\", {\n limit: params?.limit,\n });\n }\n}\n\nfunction inferPeriodFromStartTime(startTime: string): string {\n const startMs = Date.parse(startTime);\n if (Number.isNaN(startMs)) {\n return \"7d\";\n }\n\n const diffMs = Date.now() - startMs;\n const diffDays = Math.ceil(diffMs / (24 * 60 * 60 * 1000));\n\n if (diffDays <= 1) return \"1d\";\n if (diffDays <= 7) return \"7d\";\n return \"30d\";\n}\n","/**\n * KontextManagementClient - Control plane client for administrative operations\n */\n\nimport type { KontextManagementClientConfig } from \"./types.js\";\nimport { TokenManager } from \"./auth.js\";\nimport { HttpClient } from \"./http.js\";\nimport { ServiceAccountsResource } from \"./service-accounts.js\";\nimport { ApplicationsResource } from \"./applications.js\";\nimport { IntegrationsResource } from \"./integrations.js\";\nimport { AgentSessionsResource } from \"./agent-sessions.js\";\nimport { TracesResource, EventsResource } from \"./traces.js\";\n\nconst DEFAULT_API_VERSION = \"v1\";\n\n/**\n * Management API client for Kontext\n *\n * Use this client for administrative operations like:\n * - Creating and managing service accounts\n * - Creating and configuring applications\n * - Managing integrations\n * - Viewing agent sessions and traces\n *\n * @example\n * ```typescript\n * const client = new KontextManagementClient({\n * baseUrl: 'https://api.kontext.dev',\n * credentials: {\n * clientId: 'your-service-account-client-id',\n * clientSecret: 'your-service-account-client-secret',\n * },\n * });\n *\n * // Create an application\n * const { application, oauth } = await client.applications.create({\n * name: 'My Agent',\n * oauth: {\n * redirectUris: ['http://localhost:3000/callback'],\n * },\n * });\n *\n * // Create an integration\n * const { integration } = await client.integrations.create({\n * name: 'GitHub',\n * url: 'https://mcp.github.com/sse',\n * authMode: 'oauth',\n * oauth: { provider: 'github' },\n * });\n *\n * // Attach integration to application\n * await client.applications.attachIntegration(application.id, integration.id);\n * ```\n */\nexport class KontextManagementClient {\n private readonly tokenManager: TokenManager;\n private readonly http: HttpClient;\n\n /** Service Accounts resource */\n public readonly serviceAccounts: ServiceAccountsResource;\n\n /** Applications resource */\n public readonly applications: ApplicationsResource;\n\n /** Integrations resource */\n public readonly integrations: IntegrationsResource;\n\n /** Agent Sessions resource (alias: agentInstances) */\n public readonly agentSessions: AgentSessionsResource;\n\n /** Agent Instances resource (alias for agentSessions, future naming) */\n public readonly agentInstances: AgentSessionsResource;\n\n /** Traces resource */\n public readonly traces: TracesResource;\n\n /** Events resource */\n public readonly events: EventsResource;\n\n constructor(config: KontextManagementClientConfig) {\n const baseUrl = config.baseUrl.replace(/\\/$/, \"\");\n const apiVersion = config.apiVersion ?? DEFAULT_API_VERSION;\n\n // Token URL defaults to ${baseUrl}/oauth2/token but can be overridden\n // for local development where Hydra runs on a different port\n const tokenUrl = config.tokenUrl ?? `${baseUrl}/oauth2/token`;\n\n // Default scopes for management API access\n const scopes = config.scopes ?? [\"management:all\"];\n\n // Audience for token introspection - defaults to the API base URL\n const audience = config.audience ?? `${baseUrl}/api/${apiVersion}`;\n\n this.tokenManager = new TokenManager(\n tokenUrl,\n {\n clientId: config.credentials.clientId,\n clientSecret: config.credentials.clientSecret,\n },\n scopes,\n audience,\n );\n\n this.http = new HttpClient({\n baseUrl,\n apiVersion,\n tokenManager: this.tokenManager,\n });\n\n // Initialize resource modules\n this.serviceAccounts = new ServiceAccountsResource(this.http);\n this.applications = new ApplicationsResource(this.http);\n this.integrations = new IntegrationsResource(this.http);\n this.agentSessions = new AgentSessionsResource(this.http);\n this.agentInstances = this.agentSessions; // Alias for future naming\n this.traces = new TracesResource(this.http);\n this.events = new EventsResource(this.http);\n }\n\n /**\n * Force refresh the access token\n * Useful if you need to ensure a fresh token before a critical operation\n */\n async refreshToken(): Promise<void> {\n await this.tokenManager.refresh();\n }\n\n /**\n * Clear the cached access token\n * Useful when credentials have been rotated\n */\n clearToken(): void {\n this.tokenManager.clear();\n }\n}\n","/**\n * Core types for the Kontext SDK\n * These mirror the API DTOs for type-safe interactions\n */\n\n// ============================================================================\n// Applications\n// ============================================================================\n\nexport interface Application {\n id: string;\n name: string;\n canModify?: boolean;\n activeSessionCount?: number;\n idleSessionCount?: number;\n liveSessionCount?: number;\n totalSessionCount?: number;\n oauth?: ApplicationOAuth;\n archivedAt?: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface ApplicationOAuth {\n type: \"public\" | \"confidential\";\n clientId: string;\n clientSecret?: string;\n pkceRequired: boolean;\n scopes: string[];\n authorizationUrl: string;\n tokenUrl: string;\n gatewayUrl: string;\n redirectUris: string[];\n}\n\nexport interface CreateApplicationOAuthInput {\n type?: \"public\" | \"confidential\";\n redirectUris: string[];\n pkceRequired?: boolean;\n scopes?: string[];\n}\n\nexport interface CreateApplicationInput {\n name: string;\n oauth: CreateApplicationOAuthInput;\n}\n\nexport interface UpdateApplicationInput {\n name?: string;\n}\n\nexport interface UpdateApplicationOAuthInput {\n pkceRequired?: boolean;\n scopes?: string[];\n redirectUris?: string[];\n}\n\nexport interface CreateApplicationResponse {\n application: Application;\n oauth: ApplicationOAuth;\n}\n\nexport interface ApplicationResponse {\n application: Application;\n}\n\nexport interface ApplicationOAuthResponse {\n oauth: ApplicationOAuth;\n}\n\nexport interface ListApplicationsResponse {\n items: Application[];\n nextCursor?: string;\n}\n\nexport interface RotateApplicationSecretResponse {\n oauth: ApplicationOAuth;\n}\n\nexport interface UpdateApplicationIntegrationsInput {\n integrationIds: string[];\n}\n\nexport interface ApplicationIntegrationsResponse {\n integrationIds: string[];\n}\n\n// ============================================================================\n// Integrations\n// ============================================================================\n\nexport type IntegrationAuthMode =\n | \"oauth\"\n | \"user_token\"\n | \"server_token\"\n | \"none\";\n\nexport type IntegrationValidationStatus = \"pending\" | \"valid\" | \"invalid\";\n\nexport interface IntegrationOAuthSummary {\n provider?: string;\n issuer?: string;\n scopes?: string[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface IntegrationCapabilities {\n tools?: boolean;\n resources?: boolean;\n prompts?: boolean;\n}\n\nexport interface Integration {\n id: string;\n name: string;\n url: string;\n authMode: IntegrationAuthMode;\n oauth?: IntegrationOAuthSummary;\n capabilities?: IntegrationCapabilities;\n serverTokenConfigured: boolean;\n validationStatus: IntegrationValidationStatus;\n validationMessage?: string;\n lastValidatedAt?: string;\n userConnection?: ConnectionStatusResponse;\n createdAt: string;\n updatedAt: string;\n archivedAt?: string;\n}\n\nexport interface IntegrationOAuthConfigInput {\n provider?: string;\n issuer?: string;\n scopes?: string[];\n}\n\nexport interface CreateIntegrationInput {\n name: string;\n url: string;\n authMode?: IntegrationAuthMode;\n oauth?: IntegrationOAuthConfigInput;\n capabilities?: IntegrationCapabilities;\n serverToken?: string;\n}\n\nexport interface UpdateIntegrationInput {\n name?: string;\n url?: string;\n authMode?: IntegrationAuthMode;\n oauth?: IntegrationOAuthConfigInput;\n capabilities?: IntegrationCapabilities;\n serverToken?: string;\n}\n\nexport interface CreateIntegrationResponse {\n integration: Integration;\n}\n\nexport interface IntegrationResponse {\n integration: Integration;\n}\n\nexport interface ListIntegrationsResponse {\n items: Integration[];\n nextCursor?: string;\n}\n\nexport interface ValidateIntegrationResponse {\n status: IntegrationValidationStatus;\n message?: string;\n}\n\n// ============================================================================\n// Integration Connections\n// ============================================================================\n\nexport type ConnectionStatus = \"connected\" | \"disconnected\";\n\nexport interface ConnectionStatusResponse {\n connected: boolean;\n status?: ConnectionStatus;\n expiresAt?: string;\n displayName?: string;\n}\n\nexport interface ConnectionResponse {\n connection: ConnectionStatusResponse;\n}\n\nexport interface AddUserTokenInput {\n token: string;\n}\n\n// ============================================================================\n// Service Accounts\n// ============================================================================\n\nexport interface ServiceAccount {\n id: string;\n name: string;\n description: string | null;\n createdAt: string;\n}\n\nexport interface ServiceAccountCredentials {\n clientId: string;\n clientSecret: string;\n}\n\nexport interface CreateServiceAccountInput {\n name: string;\n description?: string;\n}\n\nexport interface CreateServiceAccountResponse {\n serviceAccount: ServiceAccount;\n credentials: ServiceAccountCredentials;\n}\n\nexport interface RotateSecretResponse {\n credentials: ServiceAccountCredentials;\n}\n\nexport interface ListServiceAccountsResponse {\n items: ServiceAccount[];\n nextCursor: string | null;\n}\n\nexport interface ServiceAccountResponse {\n serviceAccount: ServiceAccount;\n}\n\n// ============================================================================\n// Agent Sessions\n// ============================================================================\n\nexport type AgentSessionStatus = \"active\" | \"disconnected\";\nexport type AgentSessionDerivedStatus =\n | \"active\"\n | \"idle\"\n | \"expired\"\n | \"disconnected\";\n\nexport interface AgentSession {\n id: string;\n agentId: string;\n organizationId: string;\n authenticatedUserId: string;\n authenticatedUserEmail?: string | null;\n name: string;\n hostname?: string | null;\n userAgent?: string | null;\n clientInfo?: Record<string, unknown> | null;\n status: AgentSessionStatus;\n derivedStatus: AgentSessionDerivedStatus;\n connectedAt?: string;\n lastActiveAt?: string;\n disconnectedAt?: string;\n tokenExpiresAt?: string;\n createdAt: string;\n}\n\nexport interface AgentSessionResponse {\n session: AgentSession;\n}\n\nexport interface ListAgentSessionsResponse {\n items: AgentSession[];\n}\n\nexport interface RevokeAllSessionsResponse {\n success: boolean;\n disconnectedCount: number;\n}\n\n// ============================================================================\n// Traces & Events\n// ============================================================================\n\nexport interface Trace {\n traceId: string | null;\n sessionId: string;\n startedAt: string | null;\n endedAt: string | null;\n eventCount: number;\n okCount?: number;\n warnCount?: number;\n errorCount?: number;\n agentId?: string;\n ownerUserId?: string;\n ownerEmail?: string;\n agentName?: string;\n agentSessionId?: string;\n agentSessionName?: string;\n}\n\nexport interface TraceEvent {\n id: string;\n createdAt: string;\n sessionId: string;\n agentId: string;\n traceId?: string | null;\n apiKeyId?: string | null;\n eventType: string;\n status: string;\n durationMs?: number | null;\n integrationId?: string | null;\n toolName?: string | null;\n errorMessage?: string | null;\n bytesIn?: number | null;\n bytesOut?: number | null;\n requestJson?: unknown;\n responseJson?: unknown;\n parentEventId?: string | null;\n agentSessionId?: string | null;\n /** @deprecated Use createdAt */\n timestamp?: string;\n /** @deprecated Use status */\n level?: \"ok\" | \"warn\" | \"error\";\n /** @deprecated Use eventType */\n type?: string;\n /** @deprecated May be encoded in requestJson/responseJson */\n method?: string;\n /** @deprecated Use toolName */\n tool?: string;\n /** @deprecated Use durationMs */\n duration?: number;\n /** @deprecated Use status/errorMessage fields */\n errorType?: string;\n /** @deprecated May be encoded in requestJson/responseJson */\n metadata?: Record<string, unknown>;\n}\n\nexport interface ListTracesResponse {\n items: Trace[];\n nextCursor?: string;\n}\n\nexport interface TraceResponse {\n trace: Trace;\n events: TraceEvent[];\n}\n\nexport interface McpEvent {\n id: string;\n createdAt: string;\n agentId: string;\n integrationId: string | null;\n toolName: string | null;\n eventType: string;\n status: string;\n}\n\nexport interface McpEventListResponse {\n items: McpEvent[];\n}\n\n/**\n * @deprecated Use McpEventListResponse instead.\n */\nexport type ListEventsResponse = McpEventListResponse;\n\nexport interface TraceStats {\n totalTraces: number;\n totalEvents: number;\n eventCounts: { ok: number; warn: number; error: number };\n errorRate: number;\n latency: { avg: number; p50: number; p95: number; p99: number };\n bytesTransferred: { in: number; out: number };\n errorsByType: Array<{ type: string; count: number; percentage: number }>;\n topTools: Array<{ name: string; count: number; avgDuration: number }>;\n timeline: Array<{\n date: string;\n traceCount: number;\n eventCount: number;\n warnCount: number;\n errorCount: number;\n bytesIn: number;\n bytesOut: number;\n }>;\n}\n\nexport interface TraceStatsResponse {\n stats: TraceStats;\n}\n\n// ============================================================================\n// Pagination\n// ============================================================================\n\nexport interface PaginationParams {\n cursor?: string;\n limit?: number;\n}\n\n// ============================================================================\n// OAuth Tokens (for storage)\n// ============================================================================\n\nexport interface OAuthTokens {\n accessToken: string;\n refreshToken?: string;\n tokenType: string;\n scope?: string;\n expiresAt?: string;\n}\n\n// ============================================================================\n// Token Exchange (RFC 8693)\n// ============================================================================\n\n/**\n * RFC 8693 Token Exchange grant type\n */\nexport const TOKEN_EXCHANGE_GRANT_TYPE =\n \"urn:ietf:params:oauth:grant-type:token-exchange\";\n\n/**\n * RFC 8693 token type identifier for access tokens\n */\nexport const TOKEN_TYPE_ACCESS_TOKEN =\n \"urn:ietf:params:oauth:token-type:access_token\";\n\n/**\n * Request body for RFC 8693 token exchange\n */\nexport interface TokenExchangeRequest {\n grant_type: typeof TOKEN_EXCHANGE_GRANT_TYPE;\n subject_token: string;\n subject_token_type?: string;\n resource: string;\n scope?: string;\n audience?: string;\n}\n\n/**\n * Response from RFC 8693 token exchange\n */\nexport interface TokenExchangeResponse {\n access_token: string;\n issued_token_type: string;\n token_type: string;\n expires_in?: number;\n scope?: string;\n refresh_token?: string;\n}\n\n// ============================================================================\n// Client Configuration\n// ============================================================================\n\nexport interface KontextManagementClientConfig {\n /**\n * Base URL for the Kontext API (e.g., \"https://api.kontext.dev\")\n */\n baseUrl: string;\n\n /**\n * API version to use (default: \"v1\")\n */\n apiVersion?: string;\n\n /**\n * OAuth token endpoint URL (optional)\n * If not specified, defaults to `${baseUrl}/oauth2/token`\n * Useful for local development where Hydra runs on a different port\n */\n tokenUrl?: string;\n\n /**\n * OAuth scopes to request (optional)\n * Defaults to [\"management:all\"]\n */\n scopes?: string[];\n\n /**\n * OAuth audience for token requests (optional)\n * If not specified, defaults to `${baseUrl}/api/${apiVersion}`\n * Required for Hydra token introspection\n */\n audience?: string;\n\n /**\n * Service account credentials for authentication\n */\n credentials: {\n clientId: string;\n clientSecret: string;\n };\n}\n"]}
@@ -583,7 +583,22 @@ var KontextMcp = class {
583
583
  const url = typeof item.url === "string" ? item.url : "";
584
584
  if (!id || !url) return null;
585
585
  const category = item.category === "internal_mcp_credentials" ? "internal_mcp_credentials" : "gateway_remote_mcp";
586
- const connectType = item.connectType === "credentials" || item.connectType === "oauth" || item.connectType === "none" ? item.connectType : category === "internal_mcp_credentials" ? "credentials" : item.authMode === "oauth" ? "oauth" : "none";
586
+ const rawConnectType = item.connectType;
587
+ if (typeof rawConnectType !== "string") {
588
+ throw new KontextError(
589
+ "Runtime integration connectType is required in API response.",
590
+ "kontext_runtime_integrations_invalid_response",
591
+ { meta: { integrationId: id, connectType: rawConnectType } }
592
+ );
593
+ }
594
+ const connectType = rawConnectType === "credentials" || rawConnectType === "oauth" || rawConnectType === "user_token" || rawConnectType === "none" ? rawConnectType : null;
595
+ if (!connectType) {
596
+ throw new KontextError(
597
+ `Unknown runtime integration connectType "${rawConnectType}".`,
598
+ "kontext_runtime_integrations_invalid_response",
599
+ { meta: { integrationId: id, connectType: rawConnectType } }
600
+ );
601
+ }
587
602
  const rawConnection = item.connection && typeof item.connection === "object" ? item.connection : void 0;
588
603
  const connected = rawConnection && typeof rawConnection.connected === "boolean" ? rawConnection.connected : false;
589
604
  const status = rawConnection?.status === "connected" ? "connected" : "disconnected";
@@ -594,6 +609,9 @@ var KontextMcp = class {
594
609
  category,
595
610
  connectType,
596
611
  authMode: item.authMode === "oauth" || item.authMode === "user_token" || item.authMode === "server_token" || item.authMode === "none" ? item.authMode : void 0,
612
+ tokenLabel: typeof item.tokenLabel === "string" ? item.tokenLabel : void 0,
613
+ tokenHelpUrl: typeof item.tokenHelpUrl === "string" ? item.tokenHelpUrl : void 0,
614
+ tokenPlaceholder: typeof item.tokenPlaceholder === "string" ? item.tokenPlaceholder : void 0,
597
615
  credentialSchema: item.credentialSchema,
598
616
  requiresOauth: typeof item.requiresOauth === "boolean" ? item.requiresOauth : void 0,
599
617
  connection: rawConnection ? {