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

107 lines 3.63 kB
/** * BC Protocol Adapter * * Parses BC protocol from raw WebSocket messages and emits typed HandlerEvents. * * Responsibilities: * - Listen to raw WebSocket messages (via IBCWebSocketManager) * - Decompress gzip-compressed handler responses * - Extract server sequence numbers from Message events * - Emit typed HandlerEvents (RawHandlers, Message, FormToShow, etc.) * * IMPORTANT: This is a STATELESS service (except for lastServerSequence). * It does NOT own session state - it only parses protocol and emits events. * BCSessionManager subscribes to these events to update session state. * * Usage: * ```ts * const adapter = new BCProtocolAdapter(wsManager, eventEmitter); * adapter.start(); * * // Events are emitted automatically as messages arrive * // BCSessionManager and other consumers subscribe via eventEmitter.onHandlers() * ``` */ import type { IBCProtocolAdapter, IBCWebSocketManager, IBCHandlerEventEmitter } from '../interfaces.js'; /** * BC Protocol Adapter implementation. * * Minimal version for Week 2: * - Handles raw message parsing * - Decompresses gzipped handlers * - Tracks server sequence numbers * - Emits RawHandlers events * * Week 3 will add specialized event parsing (FormToShow, SessionInfo, etc.) */ export declare class BCProtocolAdapter implements IBCProtocolAdapter { private wsManager; private eventEmitter; private lastServerSequence; private unsubscribe; constructor(wsManager: IBCWebSocketManager, eventEmitter: IBCHandlerEventEmitter); /** * Start listening to WebSocket messages and parsing BC protocol. * * Subscribes to IBCWebSocketManager.onRawMessage() and processes * all incoming messages. * * Idempotent - safe to call multiple times (won't subscribe twice). */ start(): void; /** * Stop listening to WebSocket messages. * * Unsubscribes from raw message handler. * * Idempotent - safe to call multiple times. */ stop(): void; /** * Get current server sequence number. * * Extracted from Message events during protocol parsing. * * @returns Last server sequence number received (-1 if none) */ getLastServerSequence(): number; /** Raw message structure for type-safe access */ private static asMessageEnvelope; /** * Handle raw WebSocket message. * * Processes incoming message: * 1. Track server sequence number (from Message events) * 2. Decompress handlers (if compressed) * 3. Emit HandlerEvent * * @param msg Raw JSON-RPC message from WebSocket * @internal */ private handleRawMessage; /** Emit FormToShow event from LogicalClientEventRaisingHandler. */ private emitFormToShow; /** Emit DialogToShow event from LogicalClientEventRaisingHandler. */ private emitDialogToShow; /** Emit DataRefreshChange event from LogicalClientChangeHandler. */ private emitDataRefreshChange; /** Emit CallbackResponse event. */ private emitCallbackResponse; /** Emit Error event (ErrorMessage or ErrorDialog). */ private emitError; /** Emit ValidationMessage event. */ private emitValidationMessage; /** Emit Dialog event (Confirm or YesNo). */ private emitDialog; /** * Parse handlers and emit typed events. * * Week 3 enhancement: Extract FormToShow, SessionInfo, and DataRefreshChange * events from handler arrays. * * @param handlers Decompressed handler array * @internal */ private emitTypedEvents; } //# sourceMappingURL=BCProtocolAdapter.d.ts.map