UNPKG

bc-webclient-mcp

Version:

Model Context Protocol (MCP) server for Microsoft Dynamics 365 Business Central via WebUI protocol. Enables AI assistants to interact with BC through the web client protocol, supporting Card, List, and Document pages with full line item support and server

79 lines 2.85 kB
/** * Timeout Configuration * * Centralized timeout configuration for BC MCP Server operations. * Provides reasonable defaults matching current behavior while allowing * per-operation overrides. */ /** * Default timeouts matching current hardcoded behavior. * These values preserve backward compatibility. */ export const defaultTimeouts = { connectTimeoutMs: 10_000, // 10 seconds - matches current hardcoded value rpcTimeoutMs: 120_000, // 120 seconds - increased for BC heavy operations handlerWaitTimeoutMs: 2_500, // 2.5 seconds - matches current default readOpTimeoutMs: 120_000, // 120 seconds - increased for complex queries/filters writeOpTimeoutMs: 120_000, // 120 seconds - increased for document operations searchTimeoutMs: 120_000, // 120 seconds - Tell Me search with dialog }; /** * Resolves final timeout configuration by merging overrides with defaults. * * Allows tools and services to override specific timeouts while * inheriting defaults for others. * * @param overrides - Partial timeout overrides * @returns Complete timeout configuration * * @example * ```ts * // Use defaults * const timeouts = resolveTimeouts(); * * // Override search timeout * const timeouts = resolveTimeouts({ searchTimeoutMs: 45_000 }); * ``` */ export function resolveTimeouts(overrides) { return { ...defaultTimeouts, ...(overrides ?? {}) }; } /** * Reads timeout configuration from environment variables. * Environment variables take precedence over code defaults. * * Supported env vars: * - BC_CONNECT_TIMEOUT_MS * - BC_RPC_TIMEOUT_MS * - BC_HANDLER_WAIT_TIMEOUT_MS * - BC_READ_OP_TIMEOUT_MS * - BC_WRITE_OP_TIMEOUT_MS * - BC_SEARCH_TIMEOUT_MS * * @returns Timeout configuration from environment or defaults */ export function timeoutsFromEnv() { const env = process.env; return { connectTimeoutMs: parseTimeoutMs(env.BC_CONNECT_TIMEOUT_MS, defaultTimeouts.connectTimeoutMs), rpcTimeoutMs: parseTimeoutMs(env.BC_RPC_TIMEOUT_MS, defaultTimeouts.rpcTimeoutMs), handlerWaitTimeoutMs: parseTimeoutMs(env.BC_HANDLER_WAIT_TIMEOUT_MS, defaultTimeouts.handlerWaitTimeoutMs), readOpTimeoutMs: parseTimeoutMs(env.BC_READ_OP_TIMEOUT_MS, defaultTimeouts.readOpTimeoutMs), writeOpTimeoutMs: parseTimeoutMs(env.BC_WRITE_OP_TIMEOUT_MS, defaultTimeouts.writeOpTimeoutMs), searchTimeoutMs: parseTimeoutMs(env.BC_SEARCH_TIMEOUT_MS, defaultTimeouts.searchTimeoutMs), }; } /** * Parses timeout value from environment variable string. * Returns default if parsing fails. */ function parseTimeoutMs(value, defaultValue) { if (!value) return defaultValue; const parsed = parseInt(value, 10); if (isNaN(parsed) || parsed <= 0) { return defaultValue; } return parsed; } //# sourceMappingURL=timeouts.js.map