@mcp-abap-adt/core 2.1.3 → 2.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/dist/bin/help.d.ts +6 -0
- package/dist/bin/help.d.ts.map +1 -0
- package/dist/bin/help.js +59 -0
- package/dist/bin/mcp-abap-adt-v2.d.ts +9 -0
- package/dist/bin/mcp-abap-adt-v2.d.ts.map +1 -0
- package/dist/bin/mcp-abap-adt-v2.js +247 -0
- package/dist/handlers/behavior_definition/readonly/handleGetBdef.d.ts +21 -0
- package/dist/handlers/behavior_definition/readonly/handleGetBdef.d.ts.map +1 -0
- package/dist/handlers/behavior_definition/readonly/handleGetBdef.js +24 -0
- package/dist/handlers/behavior_definition/readonly/handleGetBdef.js.map +1 -0
- package/dist/handlers/class/high/handleCreateLocalTestClass.d.ts.map +1 -1
- package/dist/handlers/class/high/handleCreateLocalTestClass.js +6 -1
- package/dist/handlers/class/high/handleCreateLocalTestClass.js.map +1 -1
- package/dist/handlers/class/high/handleGetUnitTest.d.ts +38 -0
- package/dist/handlers/class/high/handleGetUnitTest.d.ts.map +1 -0
- package/dist/handlers/class/high/handleGetUnitTest.js +73 -0
- package/dist/handlers/class/high/handleGetUnitTest.js.map +1 -0
- package/dist/handlers/class/high/handleRunUnitTest.d.ts +122 -0
- package/dist/handlers/class/high/handleRunUnitTest.d.ts.map +1 -0
- package/dist/handlers/class/high/handleRunUnitTest.js +133 -0
- package/dist/handlers/class/high/handleRunUnitTest.js.map +1 -0
- package/dist/handlers/class/readonly/handleGetClass.d.ts +23 -0
- package/dist/handlers/class/readonly/handleGetClass.d.ts.map +1 -0
- package/dist/handlers/class/readonly/handleGetClass.js +77 -0
- package/dist/handlers/class/readonly/handleGetClass.js.map +1 -0
- package/dist/handlers/data_element/readonly/handleGetDataElement.d.ts +23 -0
- package/dist/handlers/data_element/readonly/handleGetDataElement.d.ts.map +1 -0
- package/dist/handlers/data_element/readonly/handleGetDataElement.js +79 -0
- package/dist/handlers/data_element/readonly/handleGetDataElement.js.map +1 -0
- package/dist/handlers/domain/readonly/handleGetDomain.d.ts +23 -0
- package/dist/handlers/domain/readonly/handleGetDomain.d.ts.map +1 -0
- package/dist/handlers/domain/readonly/handleGetDomain.js +79 -0
- package/dist/handlers/domain/readonly/handleGetDomain.js.map +1 -0
- package/dist/handlers/function/readonly/handleGetFunctionGroup.d.ts +23 -0
- package/dist/handlers/function/readonly/handleGetFunctionGroup.d.ts.map +1 -0
- package/dist/handlers/function/readonly/handleGetFunctionGroup.js +77 -0
- package/dist/handlers/function/readonly/handleGetFunctionGroup.js.map +1 -0
- package/dist/handlers/interface/readonly/handleGetInterface.d.ts +23 -0
- package/dist/handlers/interface/readonly/handleGetInterface.d.ts.map +1 -0
- package/dist/handlers/interface/readonly/handleGetInterface.js +77 -0
- package/dist/handlers/interface/readonly/handleGetInterface.js.map +1 -0
- package/dist/handlers/package/readonly/handleGetPackage.d.ts +22 -0
- package/dist/handlers/package/readonly/handleGetPackage.d.ts.map +1 -0
- package/dist/handlers/package/readonly/handleGetPackage.js +108 -0
- package/dist/handlers/package/readonly/handleGetPackage.js.map +1 -0
- package/dist/handlers/program/readonly/handleGetProgram.d.ts +23 -0
- package/dist/handlers/program/readonly/handleGetProgram.d.ts.map +1 -0
- package/dist/handlers/program/readonly/handleGetProgram.js +77 -0
- package/dist/handlers/program/readonly/handleGetProgram.js.map +1 -0
- package/dist/handlers/service_definition/readonly/handleGetServiceDefinition.d.ts +18 -0
- package/dist/handlers/service_definition/readonly/handleGetServiceDefinition.d.ts.map +1 -0
- package/dist/handlers/service_definition/readonly/handleGetServiceDefinition.js +109 -0
- package/dist/handlers/service_definition/readonly/handleGetServiceDefinition.js.map +1 -0
- package/dist/handlers/structure/readonly/handleGetStructure.d.ts +23 -0
- package/dist/handlers/structure/readonly/handleGetStructure.d.ts.map +1 -0
- package/dist/handlers/structure/readonly/handleGetStructure.js +77 -0
- package/dist/handlers/structure/readonly/handleGetStructure.js.map +1 -0
- package/dist/handlers/table/readonly/handleGetTable.d.ts +23 -0
- package/dist/handlers/table/readonly/handleGetTable.d.ts.map +1 -0
- package/dist/handlers/table/readonly/handleGetTable.js +77 -0
- package/dist/handlers/table/readonly/handleGetTable.js.map +1 -0
- package/dist/handlers/view/readonly/handleGetView.d.ts +33 -0
- package/dist/handlers/view/readonly/handleGetView.d.ts.map +1 -0
- package/dist/handlers/view/readonly/handleGetView.js +90 -0
- package/dist/handlers/view/readonly/handleGetView.js.map +1 -0
- package/dist/index.d.ts +126 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2979 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/ServerConfigManager.d.ts +90 -0
- package/dist/lib/ServerConfigManager.d.ts.map +1 -0
- package/dist/lib/ServerConfigManager.js +237 -0
- package/dist/lib/ServerConfigManager.js.map +1 -0
- package/dist/lib/activationUtils.d.ts +59 -0
- package/dist/lib/activationUtils.d.ts.map +1 -0
- package/dist/lib/activationUtils.js +168 -0
- package/dist/lib/authBrokerFactory.d.ts +96 -0
- package/dist/lib/authBrokerFactory.d.ts.map +1 -0
- package/dist/lib/authBrokerFactory.js +531 -0
- package/dist/lib/authBrokerFactory.js.map +1 -0
- package/dist/lib/config/ServerConfig.d.ts +17 -0
- package/dist/lib/config/ServerConfig.d.ts.map +1 -0
- package/dist/lib/config/ServerConfig.js +7 -0
- package/dist/lib/config/ServerConfig.js.map +1 -0
- package/dist/lib/getFullCodeCache.d.ts +3 -0
- package/dist/lib/getFullCodeCache.d.ts.map +1 -0
- package/dist/lib/getFullCodeCache.js +56 -0
- package/dist/lib/handlers/handlers/base/BaseHandlerGroup.d.ts +36 -0
- package/dist/lib/handlers/handlers/base/BaseHandlerGroup.d.ts.map +1 -0
- package/dist/lib/handlers/handlers/base/BaseHandlerGroup.js +268 -0
- package/dist/lib/handlers/handlers/base/BaseHandlerGroup.js.map +1 -0
- package/dist/lib/handlers/handlers/examples/usage-example.d.ts +29 -0
- package/dist/lib/handlers/handlers/examples/usage-example.d.ts.map +1 -0
- package/dist/lib/handlers/handlers/examples/usage-example.js +119 -0
- package/dist/lib/handlers/handlers/examples/usage-example.js.map +1 -0
- package/dist/lib/handlers/handlers/groups/HighLevelHandlersGroup.d.ts +14 -0
- package/dist/lib/handlers/handlers/groups/HighLevelHandlersGroup.d.ts.map +1 -0
- package/dist/lib/handlers/handlers/groups/HighLevelHandlersGroup.js +322 -0
- package/dist/lib/handlers/handlers/groups/HighLevelHandlersGroup.js.map +1 -0
- package/dist/lib/handlers/handlers/groups/LowLevelHandlersGroup.d.ts +14 -0
- package/dist/lib/handlers/handlers/groups/LowLevelHandlersGroup.d.ts.map +1 -0
- package/dist/lib/handlers/handlers/groups/LowLevelHandlersGroup.js +1214 -0
- package/dist/lib/handlers/handlers/groups/LowLevelHandlersGroup.js.map +1 -0
- package/dist/lib/handlers/handlers/groups/ReadOnlyHandlersGroup.d.ts +14 -0
- package/dist/lib/handlers/handlers/groups/ReadOnlyHandlersGroup.d.ts.map +1 -0
- package/dist/lib/handlers/handlers/groups/ReadOnlyHandlersGroup.js +232 -0
- package/dist/lib/handlers/handlers/groups/ReadOnlyHandlersGroup.js.map +1 -0
- package/dist/lib/handlers/handlers/groups/SearchHandlersGroup.d.ts +14 -0
- package/dist/lib/handlers/handlers/groups/SearchHandlersGroup.d.ts.map +1 -0
- package/dist/lib/handlers/handlers/groups/SearchHandlersGroup.js +57 -0
- package/dist/lib/handlers/handlers/groups/SearchHandlersGroup.js.map +1 -0
- package/dist/lib/handlers/handlers/groups/SystemHandlersGroup.d.ts +14 -0
- package/dist/lib/handlers/handlers/groups/SystemHandlersGroup.d.ts.map +1 -0
- package/dist/lib/handlers/handlers/groups/SystemHandlersGroup.js +176 -0
- package/dist/lib/handlers/handlers/groups/SystemHandlersGroup.js.map +1 -0
- package/dist/lib/handlers/handlers/groups/index.d.ts +13 -0
- package/dist/lib/handlers/handlers/groups/index.d.ts.map +1 -0
- package/dist/lib/handlers/handlers/groups/index.js +21 -0
- package/dist/lib/handlers/handlers/groups/index.js.map +1 -0
- package/dist/lib/handlers/handlers/index.d.ts +14 -0
- package/dist/lib/handlers/handlers/index.d.ts.map +1 -0
- package/dist/lib/handlers/handlers/index.js +37 -0
- package/dist/lib/handlers/handlers/index.js.map +1 -0
- package/dist/lib/handlers/handlers/interfaces.d.ts +67 -0
- package/dist/lib/handlers/handlers/interfaces.d.ts.map +1 -0
- package/dist/lib/handlers/handlers/interfaces.js +3 -0
- package/dist/lib/handlers/handlers/interfaces.js.map +1 -0
- package/dist/lib/handlers/handlers/registry/CompositeHandlersRegistry.d.ts +49 -0
- package/dist/lib/handlers/handlers/registry/CompositeHandlersRegistry.d.ts.map +1 -0
- package/dist/lib/handlers/handlers/registry/CompositeHandlersRegistry.js +88 -0
- package/dist/lib/handlers/handlers/registry/CompositeHandlersRegistry.js.map +1 -0
- package/dist/lib/runtimeConfig.d.ts +20 -0
- package/dist/lib/runtimeConfig.d.ts.map +1 -0
- package/dist/lib/runtimeConfig.js +130 -0
- package/dist/lib/runtimeConfig.js.map +1 -0
- package/dist/lib/servers/BaseMcpServer.d.ts +56 -0
- package/dist/lib/servers/BaseMcpServer.d.ts.map +1 -0
- package/dist/lib/servers/BaseMcpServer.js +198 -0
- package/dist/lib/servers/BaseMcpServer.js.map +1 -0
- package/dist/lib/servers/ConnectionContext.d.ts +20 -0
- package/dist/lib/servers/ConnectionContext.d.ts.map +1 -0
- package/dist/lib/servers/ConnectionContext.js +3 -0
- package/dist/lib/servers/ConnectionContext.js.map +1 -0
- package/dist/lib/servers/SseServer.d.ts +32 -0
- package/dist/lib/servers/SseServer.d.ts.map +1 -0
- package/dist/lib/servers/SseServer.js +139 -0
- package/dist/lib/servers/SseServer.js.map +1 -0
- package/dist/lib/servers/StdioServer.d.ts +20 -0
- package/dist/lib/servers/StdioServer.d.ts.map +1 -0
- package/dist/lib/servers/StdioServer.js +32 -0
- package/dist/lib/servers/StdioServer.js.map +1 -0
- package/dist/lib/servers/StreamableHttpServer.d.ts +30 -0
- package/dist/lib/servers/StreamableHttpServer.d.ts.map +1 -0
- package/dist/lib/servers/StreamableHttpServer.js +83 -0
- package/dist/lib/servers/StreamableHttpServer.js.map +1 -0
- package/dist/lib/servers/handlers/base/BaseHandlerGroup.d.ts +36 -0
- package/dist/lib/servers/handlers/base/BaseHandlerGroup.d.ts.map +1 -0
- package/dist/lib/servers/handlers/base/BaseHandlerGroup.js +268 -0
- package/dist/lib/servers/handlers/base/BaseHandlerGroup.js.map +1 -0
- package/dist/lib/servers/handlers/examples/usage-example.d.ts +29 -0
- package/dist/lib/servers/handlers/examples/usage-example.d.ts.map +1 -0
- package/dist/lib/servers/handlers/examples/usage-example.js +119 -0
- package/dist/lib/servers/handlers/examples/usage-example.js.map +1 -0
- package/dist/lib/servers/handlers/groups/HighLevelHandlersGroup.d.ts +14 -0
- package/dist/lib/servers/handlers/groups/HighLevelHandlersGroup.d.ts.map +1 -0
- package/dist/lib/servers/handlers/groups/HighLevelHandlersGroup.js +322 -0
- package/dist/lib/servers/handlers/groups/HighLevelHandlersGroup.js.map +1 -0
- package/dist/lib/servers/handlers/groups/LowLevelHandlersGroup.d.ts +14 -0
- package/dist/lib/servers/handlers/groups/LowLevelHandlersGroup.d.ts.map +1 -0
- package/dist/lib/servers/handlers/groups/LowLevelHandlersGroup.js +1214 -0
- package/dist/lib/servers/handlers/groups/LowLevelHandlersGroup.js.map +1 -0
- package/dist/lib/servers/handlers/groups/ReadOnlyHandlersGroup.d.ts +14 -0
- package/dist/lib/servers/handlers/groups/ReadOnlyHandlersGroup.d.ts.map +1 -0
- package/dist/lib/servers/handlers/groups/ReadOnlyHandlersGroup.js +232 -0
- package/dist/lib/servers/handlers/groups/ReadOnlyHandlersGroup.js.map +1 -0
- package/dist/lib/servers/handlers/groups/SearchHandlersGroup.d.ts +14 -0
- package/dist/lib/servers/handlers/groups/SearchHandlersGroup.d.ts.map +1 -0
- package/dist/lib/servers/handlers/groups/SearchHandlersGroup.js +57 -0
- package/dist/lib/servers/handlers/groups/SearchHandlersGroup.js.map +1 -0
- package/dist/lib/servers/handlers/groups/SystemHandlersGroup.d.ts +14 -0
- package/dist/lib/servers/handlers/groups/SystemHandlersGroup.d.ts.map +1 -0
- package/dist/lib/servers/handlers/groups/SystemHandlersGroup.js +176 -0
- package/dist/lib/servers/handlers/groups/SystemHandlersGroup.js.map +1 -0
- package/dist/lib/servers/handlers/groups/index.d.ts +13 -0
- package/dist/lib/servers/handlers/groups/index.d.ts.map +1 -0
- package/dist/lib/servers/handlers/groups/index.js +21 -0
- package/dist/lib/servers/handlers/groups/index.js.map +1 -0
- package/dist/lib/servers/handlers/index.d.ts +14 -0
- package/dist/lib/servers/handlers/index.d.ts.map +1 -0
- package/dist/lib/servers/handlers/index.js +37 -0
- package/dist/lib/servers/handlers/index.js.map +1 -0
- package/dist/lib/servers/handlers/interfaces.d.ts +67 -0
- package/dist/lib/servers/handlers/interfaces.d.ts.map +1 -0
- package/dist/lib/servers/handlers/interfaces.js +3 -0
- package/dist/lib/servers/handlers/interfaces.js.map +1 -0
- package/dist/lib/servers/handlers/registry/CompositeHandlersRegistry.d.ts +49 -0
- package/dist/lib/servers/handlers/registry/CompositeHandlersRegistry.d.ts.map +1 -0
- package/dist/lib/servers/handlers/registry/CompositeHandlersRegistry.js +88 -0
- package/dist/lib/servers/handlers/registry/CompositeHandlersRegistry.js.map +1 -0
- package/dist/lib/servers/index.d.ts +5 -0
- package/dist/lib/servers/index.d.ts.map +1 -0
- package/dist/lib/servers/index.js +21 -0
- package/dist/lib/servers/index.js.map +1 -0
- package/dist/lib/servers/launcher.d.ts +2 -0
- package/dist/lib/servers/launcher.d.ts.map +1 -0
- package/dist/lib/servers/launcher.js +123 -0
- package/dist/lib/servers/launcher.js.map +1 -0
- package/dist/lib/servers/mcp_handlers.d.ts +25 -0
- package/dist/lib/servers/mcp_handlers.d.ts.map +1 -0
- package/dist/lib/servers/mcp_handlers.js +822 -0
- package/dist/lib/servers/mcp_handlers.js.map +1 -0
- package/dist/lib/servers/mcp_server.d.ts +7 -0
- package/dist/lib/servers/mcp_server.d.ts.map +1 -0
- package/dist/lib/servers/mcp_server.js +12 -0
- package/dist/lib/servers/utils.d.ts +42 -0
- package/dist/lib/servers/utils.d.ts.map +1 -0
- package/dist/lib/servers/utils.js +620 -0
- package/dist/lib/servers/utils.js.map +1 -0
- package/dist/lib/servers/v2/__tests__/unit/McpServer.test.d.ts +7 -0
- package/dist/lib/servers/v2/__tests__/unit/McpServer.test.d.ts.map +1 -0
- package/dist/lib/servers/v2/__tests__/unit/McpServer.test.js +218 -0
- package/dist/lib/servers/v2/connection/LocalConnectionProvider.d.ts +20 -0
- package/dist/lib/servers/v2/connection/LocalConnectionProvider.d.ts.map +1 -0
- package/dist/lib/servers/v2/connection/LocalConnectionProvider.js +70 -0
- package/dist/lib/servers/v2/connection/RemoteConnectionProvider.d.ts +21 -0
- package/dist/lib/servers/v2/connection/RemoteConnectionProvider.d.ts.map +1 -0
- package/dist/lib/servers/v2/connection/RemoteConnectionProvider.js +36 -0
- package/dist/lib/servers/v2/connection/index.d.ts +6 -0
- package/dist/lib/servers/v2/connection/index.d.ts.map +1 -0
- package/dist/lib/servers/v2/connection/index.js +10 -0
- package/dist/lib/servers/v2/factory/AuthBrokerFactory.d.ts +29 -0
- package/dist/lib/servers/v2/factory/AuthBrokerFactory.d.ts.map +1 -0
- package/dist/lib/servers/v2/factory/AuthBrokerFactory.js +79 -0
- package/dist/lib/servers/v2/factory/LocalModeFactory.d.ts +38 -0
- package/dist/lib/servers/v2/factory/LocalModeFactory.d.ts.map +1 -0
- package/dist/lib/servers/v2/factory/LocalModeFactory.js +38 -0
- package/dist/lib/servers/v2/factory/index.d.ts +6 -0
- package/dist/lib/servers/v2/factory/index.d.ts.map +1 -0
- package/dist/lib/servers/v2/factory/index.js +10 -0
- package/dist/lib/servers/v2/index.d.ts +9 -0
- package/dist/lib/servers/v2/index.d.ts.map +1 -0
- package/dist/lib/servers/v2/index.js +27 -0
- package/dist/lib/servers/v2/index.js.map +1 -0
- package/dist/lib/servers/v2/interfaces/connection.d.ts +188 -0
- package/dist/lib/servers/v2/interfaces/connection.d.ts.map +1 -0
- package/dist/lib/servers/v2/interfaces/connection.js +7 -0
- package/dist/lib/servers/v2/interfaces/index.d.ts +10 -0
- package/dist/lib/servers/v2/interfaces/index.d.ts.map +1 -0
- package/dist/lib/servers/v2/interfaces/index.js +25 -0
- package/dist/lib/servers/v2/interfaces/protocol.d.ts +30 -0
- package/dist/lib/servers/v2/interfaces/protocol.d.ts.map +1 -0
- package/dist/lib/servers/v2/interfaces/protocol.js +7 -0
- package/dist/lib/servers/v2/interfaces/session.d.ts +98 -0
- package/dist/lib/servers/v2/interfaces/session.d.ts.map +1 -0
- package/dist/lib/servers/v2/interfaces/session.js +7 -0
- package/dist/lib/servers/v2/interfaces/transport.d.ts +88 -0
- package/dist/lib/servers/v2/interfaces/transport.d.ts.map +1 -0
- package/dist/lib/servers/v2/interfaces/transport.js +7 -0
- package/dist/lib/servers/v2/protocol/ProtocolHandler.d.ts +21 -0
- package/dist/lib/servers/v2/protocol/ProtocolHandler.d.ts.map +1 -0
- package/dist/lib/servers/v2/protocol/ProtocolHandler.js +77 -0
- package/dist/lib/servers/v2/protocol/index.d.ts +5 -0
- package/dist/lib/servers/v2/protocol/index.d.ts.map +1 -0
- package/dist/lib/servers/v2/protocol/index.js +8 -0
- package/dist/lib/servers/v2/server/McpServer.d.ts +76 -0
- package/dist/lib/servers/v2/server/McpServer.d.ts.map +1 -0
- package/dist/lib/servers/v2/server/McpServer.js +243 -0
- package/dist/lib/servers/v2/server/index.d.ts +5 -0
- package/dist/lib/servers/v2/server/index.d.ts.map +1 -0
- package/dist/lib/servers/v2/server/index.js +8 -0
- package/dist/lib/servers/v2/session/SessionManager.d.ts +40 -0
- package/dist/lib/servers/v2/session/SessionManager.d.ts.map +1 -0
- package/dist/lib/servers/v2/session/SessionManager.js +136 -0
- package/dist/lib/servers/v2/session/index.d.ts +5 -0
- package/dist/lib/servers/v2/session/index.d.ts.map +1 -0
- package/dist/lib/servers/v2/session/index.js +8 -0
- package/dist/lib/servers/v2/transports/SseTransport.d.ts +49 -0
- package/dist/lib/servers/v2/transports/SseTransport.d.ts.map +1 -0
- package/dist/lib/servers/v2/transports/SseTransport.js +89 -0
- package/dist/lib/servers/v2/transports/StdioTransport.d.ts +31 -0
- package/dist/lib/servers/v2/transports/StdioTransport.d.ts.map +1 -0
- package/dist/lib/servers/v2/transports/StdioTransport.js +91 -0
- package/dist/lib/servers/v2/transports/StreamableHttpTransport.d.ts +51 -0
- package/dist/lib/servers/v2/transports/StreamableHttpTransport.d.ts.map +1 -0
- package/dist/lib/servers/v2/transports/StreamableHttpTransport.js +147 -0
- package/dist/lib/servers/v2/transports/index.d.ts +7 -0
- package/dist/lib/servers/v2/transports/index.d.ts.map +1 -0
- package/dist/lib/servers/v2/transports/index.js +12 -0
- package/dist/lib/servers/v2/types/common.d.ts +17 -0
- package/dist/lib/servers/v2/types/common.d.ts.map +1 -0
- package/dist/lib/servers/v2/types/common.js +6 -0
- package/dist/lib/servers/v2/types/common.js.map +1 -0
- package/dist/lib/servers/v2/types/index.d.ts +8 -0
- package/dist/lib/servers/v2/types/index.d.ts.map +1 -0
- package/dist/lib/servers/v2/types/index.js +24 -0
- package/dist/lib/servers/v2/types/index.js.map +1 -0
- package/dist/lib/servers/v2/types/transport.d.ts +28 -0
- package/dist/lib/servers/v2/types/transport.d.ts.map +1 -0
- package/dist/lib/servers/v2/types/transport.js +8 -0
- package/dist/lib/servers/v2/types/transport.js.map +1 -0
- package/dist/lib/servers/v2/utils/StdioLogger.d.ts +17 -0
- package/dist/lib/servers/v2/utils/StdioLogger.d.ts.map +1 -0
- package/dist/lib/servers/v2/utils/StdioLogger.js +33 -0
- package/dist/lib/servers/v2/utils/StdioLogger.js.map +1 -0
- package/dist/lib/stores/UnixFileServiceKeyStore.d.ts +42 -0
- package/dist/lib/stores/UnixFileServiceKeyStore.d.ts.map +1 -0
- package/dist/lib/stores/UnixFileServiceKeyStore.js +53 -0
- package/dist/lib/stores/UnixFileSessionStore.d.ts +54 -0
- package/dist/lib/stores/UnixFileSessionStore.d.ts.map +1 -0
- package/dist/lib/stores/UnixFileSessionStore.js +70 -0
- package/dist/lib/stores/WindowsFileServiceKeyStore.d.ts +42 -0
- package/dist/lib/stores/WindowsFileServiceKeyStore.d.ts.map +1 -0
- package/dist/lib/stores/WindowsFileServiceKeyStore.js +53 -0
- package/dist/lib/stores/WindowsFileSessionStore.d.ts +54 -0
- package/dist/lib/stores/WindowsFileSessionStore.d.ts.map +1 -0
- package/dist/lib/stores/WindowsFileSessionStore.js +70 -0
- package/dist/lib/toolsRegistry.d.ts +13 -0
- package/dist/lib/toolsRegistry.d.ts.map +1 -0
- package/dist/lib/toolsRegistry.js +410 -0
- package/dist/lib/transportConfig.d.ts +27 -0
- package/dist/lib/transportConfig.d.ts.map +1 -0
- package/dist/lib/transportConfig.js +124 -0
- package/dist/lib/transports/stdio.d.ts +10 -0
- package/dist/lib/transports/stdio.d.ts.map +1 -0
- package/dist/lib/transports/stdio.js +73 -0
- package/dist/lib/yamlConfig.d.ts +59 -0
- package/dist/lib/yamlConfig.d.ts.map +1 -0
- package/dist/lib/yamlConfig.js +349 -0
- package/dist/lib/yamlConfig.js.map +1 -0
- package/dist/server/v1/AuthBrokerConfig.d.ts +19 -0
- package/dist/server/v1/AuthBrokerConfig.d.ts.map +1 -0
- package/dist/server/v1/AuthBrokerConfig.js +44 -0
- package/dist/server/v1/AuthBrokerConfig.js.map +1 -0
- package/dist/server/v1/IServerConfig.d.ts +17 -0
- package/dist/server/v1/IServerConfig.d.ts.map +1 -0
- package/dist/server/v1/IServerConfig.js +7 -0
- package/dist/server/v1/IServerConfig.js.map +1 -0
- package/dist/server/v1/ServerConfig.d.ts +16 -0
- package/dist/server/v1/ServerConfig.d.ts.map +1 -0
- package/dist/server/v1/ServerConfig.js +6 -0
- package/dist/server/v1/ServerConfig.js.map +1 -0
- package/dist/server/v1/embeddable-server.d.ts +89 -0
- package/dist/server/v1/embeddable-server.d.ts.map +1 -0
- package/dist/server/v1/embeddable-server.js +83 -0
- package/dist/server/v1/embeddable-server.js.map +1 -0
- package/dist/server/v1/index.d.ts +30 -0
- package/dist/server/v1/index.d.ts.map +1 -0
- package/dist/server/v1/index.js +65 -0
- package/dist/server/v1/index.js.map +1 -0
- package/dist/server/v1/legacy-server.d.ts +141 -0
- package/dist/server/v1/legacy-server.d.ts.map +1 -0
- package/dist/server/v1/legacy-server.js +2099 -0
- package/dist/server/v1/legacy-server.js.map +1 -0
- package/dist/server/v1/mcp_handlers.d.ts +19 -0
- package/dist/server/v1/mcp_handlers.d.ts.map +1 -0
- package/dist/server/v1/mcp_handlers.js +85 -0
- package/dist/server/v1/mcp_handlers.js.map +1 -0
- package/dist/server/v2/AuthBrokerConfig.d.ts +22 -0
- package/dist/server/v2/AuthBrokerConfig.d.ts.map +1 -0
- package/dist/server/v2/AuthBrokerConfig.js +46 -0
- package/dist/server/v2/AuthBrokerConfig.js.map +1 -0
- package/dist/server/v2/BaseMcpServer.d.ts +67 -0
- package/dist/server/v2/BaseMcpServer.d.ts.map +1 -0
- package/dist/server/v2/BaseMcpServer.js +273 -0
- package/dist/server/v2/BaseMcpServer.js.map +1 -0
- package/dist/server/v2/ConnectionContext.d.ts +20 -0
- package/dist/server/v2/ConnectionContext.d.ts.map +1 -0
- package/dist/server/v2/ConnectionContext.js +3 -0
- package/dist/server/v2/ConnectionContext.js.map +1 -0
- package/dist/server/v2/IHttpApplication.d.ts +42 -0
- package/dist/server/v2/IHttpApplication.d.ts.map +1 -0
- package/dist/server/v2/IHttpApplication.js +3 -0
- package/dist/server/v2/IHttpApplication.js.map +1 -0
- package/dist/server/v2/IServerConfig.d.ts +15 -0
- package/dist/server/v2/IServerConfig.d.ts.map +1 -0
- package/dist/server/v2/IServerConfig.js +7 -0
- package/dist/server/v2/IServerConfig.js.map +1 -0
- package/dist/server/v2/ServerConfig.d.ts +16 -0
- package/dist/server/v2/ServerConfig.d.ts.map +1 -0
- package/dist/server/v2/ServerConfig.js +6 -0
- package/dist/server/v2/ServerConfig.js.map +1 -0
- package/dist/server/v2/SseServer.d.ts +95 -0
- package/dist/server/v2/SseServer.d.ts.map +1 -0
- package/dist/server/v2/SseServer.js +217 -0
- package/dist/server/v2/SseServer.js.map +1 -0
- package/dist/server/v2/StdioServer.d.ts +20 -0
- package/dist/server/v2/StdioServer.d.ts.map +1 -0
- package/dist/server/v2/StdioServer.js +32 -0
- package/dist/server/v2/StdioServer.js.map +1 -0
- package/dist/server/v2/StreamableHttpServer.d.ts +94 -0
- package/dist/server/v2/StreamableHttpServer.d.ts.map +1 -0
- package/dist/server/v2/StreamableHttpServer.js +170 -0
- package/dist/server/v2/StreamableHttpServer.js.map +1 -0
- package/dist/server/v2/index.d.ts +6 -0
- package/dist/server/v2/index.d.ts.map +1 -0
- package/dist/server/v2/index.js +22 -0
- package/dist/server/v2/index.js.map +1 -0
- package/dist/server/v2/launcher.d.ts +2 -0
- package/dist/server/v2/launcher.d.ts.map +1 -0
- package/dist/server/v2/launcher.js +181 -0
- package/dist/server/v2/launcher.js.map +1 -0
- package/dist/server/v2/mcp_handlers.d.ts +25 -0
- package/dist/server/v2/mcp_handlers.d.ts.map +1 -0
- package/dist/server/v2/mcp_handlers.js +828 -0
- package/dist/server/v2/mcp_handlers.js.map +1 -0
- package/dist/server/v2/utils.d.ts +42 -0
- package/dist/server/v2/utils.d.ts.map +1 -0
- package/dist/server/v2/utils.js +620 -0
- package/dist/server/v2/utils.js.map +1 -0
- package/dist/tools/test-v2-server-stdio-compiled.js +132 -0
- package/dist/utils/lockStateManager.d.ts +2 -12
- package/dist/utils/lockStateManager.d.ts.map +1 -1
- package/dist/utils/lockStateManager.js +4 -63
- package/dist/utils/lockStateManager.js.map +1 -1
- package/docs/user-guide/AVAILABLE_TOOLS.md +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BaseMcpServer = void 0;
|
|
4
|
+
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
5
|
+
const connection_1 = require("@mcp-abap-adt/connection");
|
|
6
|
+
const CompositeHandlersRegistry_js_1 = require("./handlers/registry/CompositeHandlersRegistry.js");
|
|
7
|
+
const logger_1 = require("@mcp-abap-adt/logger");
|
|
8
|
+
const utils_js_1 = require("../utils.js");
|
|
9
|
+
/**
|
|
10
|
+
* Base MCP Server class that extends SDK McpServer
|
|
11
|
+
* Manages connection context and provides connection injection for handlers
|
|
12
|
+
*/
|
|
13
|
+
class BaseMcpServer extends mcp_js_1.McpServer {
|
|
14
|
+
/**
|
|
15
|
+
* Logger used for handler context
|
|
16
|
+
*/
|
|
17
|
+
logger;
|
|
18
|
+
/**
|
|
19
|
+
* Connection context (set per request for SSE/HTTP, once for stdio)
|
|
20
|
+
*/
|
|
21
|
+
connectionContext = null;
|
|
22
|
+
/**
|
|
23
|
+
* Auth broker for token and service key management
|
|
24
|
+
*/
|
|
25
|
+
authBroker;
|
|
26
|
+
constructor(options) {
|
|
27
|
+
super({ name: options.name, version: options.version ?? "1.0.0" });
|
|
28
|
+
this.logger = options.logger ?? logger_1.defaultLogger;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Sets connection context using auth broker
|
|
32
|
+
* For stdio: called once on startup
|
|
33
|
+
* For SSE/HTTP: called per-request
|
|
34
|
+
*/
|
|
35
|
+
async setConnectionContext(destination, authBroker) {
|
|
36
|
+
this.authBroker = authBroker;
|
|
37
|
+
// Register broker so destination-aware connections can refresh tokens
|
|
38
|
+
(0, utils_js_1.registerAuthBroker)(destination, authBroker);
|
|
39
|
+
// Get connection parameters from broker
|
|
40
|
+
// AuthBroker.getConnectionConfig() automatically checks session store first, then service key store
|
|
41
|
+
const connectionConfig = await authBroker.getConnectionConfig(destination);
|
|
42
|
+
if (!connectionConfig) {
|
|
43
|
+
throw new Error(`Connection config not found for destination: ${destination}`);
|
|
44
|
+
}
|
|
45
|
+
// Try to get fresh token from broker
|
|
46
|
+
// If broker can't refresh (no UAA credentials), use existing token from connectionConfig
|
|
47
|
+
let freshToken;
|
|
48
|
+
try {
|
|
49
|
+
freshToken = await authBroker.getToken(destination);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
// Broker can't provide/refresh token (e.g., no UAA credentials for .env-only setup)
|
|
53
|
+
// Use existing token from connectionConfig - user is responsible for token management
|
|
54
|
+
this.logger.debug(`Broker can't refresh token, using existing token from session: ${error instanceof Error ? error.message : String(error)}`);
|
|
55
|
+
freshToken = connectionConfig.authorizationToken;
|
|
56
|
+
}
|
|
57
|
+
const tokenToUse = freshToken || connectionConfig.authorizationToken || '';
|
|
58
|
+
// Determine auth type from connection config
|
|
59
|
+
const authType = connectionConfig.authType ||
|
|
60
|
+
(connectionConfig.username && connectionConfig.password ? 'basic' : 'jwt');
|
|
61
|
+
this.connectionContext = {
|
|
62
|
+
sessionId: destination,
|
|
63
|
+
connectionParams: authType === 'basic'
|
|
64
|
+
? {
|
|
65
|
+
url: connectionConfig.serviceUrl || '',
|
|
66
|
+
authType: 'basic',
|
|
67
|
+
username: connectionConfig.username || '',
|
|
68
|
+
password: connectionConfig.password || '',
|
|
69
|
+
client: connectionConfig.sapClient || '',
|
|
70
|
+
}
|
|
71
|
+
: {
|
|
72
|
+
url: connectionConfig.serviceUrl || '',
|
|
73
|
+
authType: 'jwt',
|
|
74
|
+
jwtToken: tokenToUse, // broker keeps it fresh
|
|
75
|
+
client: connectionConfig.sapClient || '',
|
|
76
|
+
},
|
|
77
|
+
metadata: {
|
|
78
|
+
destination,
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Gets current connection context
|
|
84
|
+
*/
|
|
85
|
+
getConnectionContext() {
|
|
86
|
+
return this.connectionContext;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Gets ABAP connection from connection context
|
|
90
|
+
* Creates connection using connectionParams from context
|
|
91
|
+
* Automatically refreshes token via AuthBroker if available (inside makeAdtRequest)
|
|
92
|
+
*/
|
|
93
|
+
async getConnection() {
|
|
94
|
+
if (!this.connectionContext?.connectionParams) {
|
|
95
|
+
throw new Error('Connection context not set. Call setConnectionContext() first.');
|
|
96
|
+
}
|
|
97
|
+
const connection = (0, connection_1.createAbapConnection)(this.connectionContext.connectionParams);
|
|
98
|
+
const destination = this.connectionContext.metadata?.destination;
|
|
99
|
+
if (destination) {
|
|
100
|
+
const { createDestinationAwareConnection } = await import('../utils.js');
|
|
101
|
+
return createDestinationAwareConnection(connection, destination);
|
|
102
|
+
}
|
|
103
|
+
return connection;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Registers handlers from registry
|
|
107
|
+
* Wraps handlers to inject connection as first parameter
|
|
108
|
+
*
|
|
109
|
+
* Handler signature: (connection: AbapConnection, args: any) => Promise<any>
|
|
110
|
+
* Registered as: (args: any) => handler(getConnection(), args)
|
|
111
|
+
*
|
|
112
|
+
* This ensures connection is injected but NOT exposed in MCP tool signature
|
|
113
|
+
*/
|
|
114
|
+
registerHandlers(handlersRegistry) {
|
|
115
|
+
// Get handler groups from registry
|
|
116
|
+
if (handlersRegistry instanceof CompositeHandlersRegistry_js_1.CompositeHandlersRegistry) {
|
|
117
|
+
const groups = handlersRegistry.getHandlerGroups();
|
|
118
|
+
for (const group of groups) {
|
|
119
|
+
const handlers = group.getHandlers();
|
|
120
|
+
for (const entry of handlers) {
|
|
121
|
+
// Wrap handler to inject connection from context
|
|
122
|
+
// Original handler: (context: HandlerContext, args: any) => Promise<any>
|
|
123
|
+
const wrappedHandler = async (args) => {
|
|
124
|
+
// Get connection from context (this.connectionContext)
|
|
125
|
+
// Token will be automatically refreshed via AuthBroker if needed
|
|
126
|
+
const context = {
|
|
127
|
+
connection: await this.getConnection(),
|
|
128
|
+
logger: this.logger,
|
|
129
|
+
};
|
|
130
|
+
// If handler expects context+args (preferred), pass both.
|
|
131
|
+
// Otherwise, update group context and call with args only for backward compatibility.
|
|
132
|
+
// NOTE: Always await the handler result to ensure we get the resolved value for normalization
|
|
133
|
+
let handlerPromise;
|
|
134
|
+
if (entry.handler.length >= 2) {
|
|
135
|
+
handlerPromise = entry.handler(context, args);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
try {
|
|
139
|
+
if (typeof group.setContext === 'function') {
|
|
140
|
+
group.setContext(context);
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
group.context = context;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
// ignore if group doesn't expose context setter
|
|
148
|
+
}
|
|
149
|
+
handlerPromise = entry.handler(args);
|
|
150
|
+
}
|
|
151
|
+
const result = await handlerPromise;
|
|
152
|
+
// Handle errors: if handler returns isError, throw McpError
|
|
153
|
+
if (result?.isError) {
|
|
154
|
+
const { ErrorCode, McpError } = await import('@modelcontextprotocol/sdk/types.js');
|
|
155
|
+
const errorText = (result.content || [])
|
|
156
|
+
.map((item) => {
|
|
157
|
+
if (item?.type === 'json' && item.json !== undefined) {
|
|
158
|
+
return JSON.stringify(item.json);
|
|
159
|
+
}
|
|
160
|
+
return item?.text || String(item);
|
|
161
|
+
})
|
|
162
|
+
.join('\n') || 'Unknown error';
|
|
163
|
+
throw new McpError(ErrorCode.InternalError, errorText);
|
|
164
|
+
}
|
|
165
|
+
// Normalize content: SDK expects text/image/audio/resource, convert custom json to text
|
|
166
|
+
const content = (result?.content || []).map((item) => {
|
|
167
|
+
if (item?.type === 'json' && item.json !== undefined) {
|
|
168
|
+
return {
|
|
169
|
+
type: 'text',
|
|
170
|
+
text: JSON.stringify(item.json),
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
// Ensure all items have proper text type structure
|
|
174
|
+
return {
|
|
175
|
+
type: 'text',
|
|
176
|
+
text: item?.text || String(item || ''),
|
|
177
|
+
};
|
|
178
|
+
});
|
|
179
|
+
return { content };
|
|
180
|
+
};
|
|
181
|
+
// Register wrapped handler via SDK registerTool
|
|
182
|
+
// Note: connection is NOT part of MCP tool signature
|
|
183
|
+
this.registerTool(entry.toolDefinition.name, {
|
|
184
|
+
description: entry.toolDefinition.description,
|
|
185
|
+
inputSchema: entry.toolDefinition.inputSchema,
|
|
186
|
+
}, wrappedHandler);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
// Fallback: use registerAllTools directly (handlers won't have connection injected)
|
|
192
|
+
// This should not happen in normal flow
|
|
193
|
+
handlersRegistry.registerAllTools(this);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
exports.BaseMcpServer = BaseMcpServer;
|
|
198
|
+
//# sourceMappingURL=BaseMcpServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseMcpServer.js","sourceRoot":"","sources":["../../../src/lib/servers/BaseMcpServer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { SapConfig } from "@mcp-abap-adt/connection";
|
|
2
|
+
/**
|
|
3
|
+
* Connection context for MCP server
|
|
4
|
+
* Contains connection parameters and session information
|
|
5
|
+
*/
|
|
6
|
+
export interface ConnectionContext {
|
|
7
|
+
/**
|
|
8
|
+
* Connection parameters (SAP URL, auth, client)
|
|
9
|
+
*/
|
|
10
|
+
connectionParams: SapConfig;
|
|
11
|
+
/**
|
|
12
|
+
* Session ID for this connection context
|
|
13
|
+
*/
|
|
14
|
+
sessionId: string;
|
|
15
|
+
/**
|
|
16
|
+
* Optional metadata for additional context information
|
|
17
|
+
*/
|
|
18
|
+
metadata?: Record<string, any>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=ConnectionContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConnectionContext.d.ts","sourceRoot":"","sources":["../../../src/lib/servers/ConnectionContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,gBAAgB,EAAE,SAAS,CAAC;IAE5B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConnectionContext.js","sourceRoot":"","sources":["../../../src/lib/servers/ConnectionContext.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Logger } from "@mcp-abap-adt/logger";
|
|
2
|
+
import { IHandlersRegistry } from "./handlers/interfaces.js";
|
|
3
|
+
import { AuthBrokerFactory } from "../authBrokerFactory.js";
|
|
4
|
+
export interface SseServerOptions {
|
|
5
|
+
host?: string;
|
|
6
|
+
port?: number;
|
|
7
|
+
ssePath?: string;
|
|
8
|
+
postPath?: string;
|
|
9
|
+
defaultDestination?: string;
|
|
10
|
+
logger?: Logger;
|
|
11
|
+
version?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Minimal SSE server: creates a new BaseMcpServer per GET connection, routes POST by sessionId.
|
|
15
|
+
*/
|
|
16
|
+
export declare class SseServer {
|
|
17
|
+
private readonly handlersRegistry;
|
|
18
|
+
private readonly authBrokerFactory;
|
|
19
|
+
private readonly host;
|
|
20
|
+
private readonly port;
|
|
21
|
+
private readonly ssePath;
|
|
22
|
+
private readonly postPath;
|
|
23
|
+
private readonly defaultDestination?;
|
|
24
|
+
private readonly sessions;
|
|
25
|
+
private readonly logger;
|
|
26
|
+
private readonly version;
|
|
27
|
+
constructor(handlersRegistry: IHandlersRegistry, authBrokerFactory: AuthBrokerFactory, opts?: SseServerOptions);
|
|
28
|
+
start(): Promise<void>;
|
|
29
|
+
private handleGet;
|
|
30
|
+
private handlePost;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=SseServer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SseServer.d.ts","sourceRoot":"","sources":["../../../src/lib/servers/SseServer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAGnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAG5D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAOD;;GAEG;AACH,qBAAa,SAAS;IAWlB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAXpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmC;IAC5D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAGd,gBAAgB,EAAE,iBAAiB,EACnC,iBAAiB,EAAE,iBAAiB,EACrD,IAAI,CAAC,EAAE,gBAAgB;IAWnB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAoBd,SAAS;YAgET,UAAU;CA2BzB"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.SseServer = void 0;
|
|
7
|
+
const express_1 = __importDefault(require("express"));
|
|
8
|
+
const sse_js_1 = require("@modelcontextprotocol/sdk/server/sse.js");
|
|
9
|
+
const handlerLogger_js_1 = require("../handlerLogger.js");
|
|
10
|
+
const BaseMcpServer_js_1 = require("./BaseMcpServer.js");
|
|
11
|
+
const DEFAULT_VERSION = process.env.npm_package_version ?? "1.0.0";
|
|
12
|
+
/**
|
|
13
|
+
* Minimal SSE server: creates a new BaseMcpServer per GET connection, routes POST by sessionId.
|
|
14
|
+
*/
|
|
15
|
+
class SseServer {
|
|
16
|
+
handlersRegistry;
|
|
17
|
+
authBrokerFactory;
|
|
18
|
+
host;
|
|
19
|
+
port;
|
|
20
|
+
ssePath;
|
|
21
|
+
postPath;
|
|
22
|
+
defaultDestination;
|
|
23
|
+
sessions = new Map();
|
|
24
|
+
logger;
|
|
25
|
+
version;
|
|
26
|
+
constructor(handlersRegistry, authBrokerFactory, opts) {
|
|
27
|
+
this.handlersRegistry = handlersRegistry;
|
|
28
|
+
this.authBrokerFactory = authBrokerFactory;
|
|
29
|
+
this.host = opts?.host ?? "127.0.0.1";
|
|
30
|
+
this.port = opts?.port ?? 3001;
|
|
31
|
+
this.ssePath = opts?.ssePath ?? "/sse";
|
|
32
|
+
this.postPath = opts?.postPath ?? "/messages";
|
|
33
|
+
this.defaultDestination = opts?.defaultDestination;
|
|
34
|
+
this.logger = opts?.logger ?? handlerLogger_js_1.noopLogger;
|
|
35
|
+
this.version = opts?.version ?? DEFAULT_VERSION;
|
|
36
|
+
}
|
|
37
|
+
async start() {
|
|
38
|
+
const app = (0, express_1.default)();
|
|
39
|
+
app.use(express_1.default.json());
|
|
40
|
+
app.get(this.ssePath, async (req, res) => {
|
|
41
|
+
await this.handleGet(req, res);
|
|
42
|
+
});
|
|
43
|
+
app.post(this.postPath, async (req, res) => {
|
|
44
|
+
const url = new URL(req.originalUrl, `http://${req.headers.host}`);
|
|
45
|
+
await this.handlePost(req, res, url);
|
|
46
|
+
});
|
|
47
|
+
await new Promise((resolve, reject) => {
|
|
48
|
+
const srv = app
|
|
49
|
+
.listen(this.port, this.host, () => resolve())
|
|
50
|
+
.on("error", reject);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
async handleGet(req, res) {
|
|
54
|
+
const destinationHeader = req.headers["x-mcp-destination"] ??
|
|
55
|
+
req.headers["X-MCP-Destination"];
|
|
56
|
+
const destination = destinationHeader || this.defaultDestination;
|
|
57
|
+
if (!destination) {
|
|
58
|
+
this.logger.error("SSE GET: Destination not provided");
|
|
59
|
+
res.writeHead(400).end("Destination not provided");
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
this.logger.debug(`SSE GET: destination=${destination}`);
|
|
63
|
+
const broker = await this.authBrokerFactory.getOrCreateAuthBroker(destination);
|
|
64
|
+
if (!broker) {
|
|
65
|
+
this.logger.error(`SSE GET: Auth broker not available for ${destination}`);
|
|
66
|
+
res.writeHead(400).end("Auth broker not available");
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
class SessionServer extends BaseMcpServer_js_1.BaseMcpServer {
|
|
70
|
+
registry;
|
|
71
|
+
loggerImpl;
|
|
72
|
+
ver;
|
|
73
|
+
constructor(registry, loggerImpl, ver) {
|
|
74
|
+
super({ name: "mcp-abap-adt-sse", version: ver, logger: loggerImpl });
|
|
75
|
+
this.registry = registry;
|
|
76
|
+
this.loggerImpl = loggerImpl;
|
|
77
|
+
this.ver = ver;
|
|
78
|
+
}
|
|
79
|
+
async init(dest, b) {
|
|
80
|
+
await this.setConnectionContext(dest, b);
|
|
81
|
+
this.registerHandlers(this.registry);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const server = new SessionServer(this.handlersRegistry, this.logger, this.version);
|
|
85
|
+
await server.init(destination, broker);
|
|
86
|
+
const transport = new sse_js_1.SSEServerTransport(this.postPath, res);
|
|
87
|
+
const sessionId = transport.sessionId;
|
|
88
|
+
console.error(`[SSE GET] Created session ${sessionId} for destination ${destination}`);
|
|
89
|
+
this.sessions.set(sessionId, { server, transport });
|
|
90
|
+
console.error(`[SSE GET] Session stored, total sessions: ${this.sessions.size}`);
|
|
91
|
+
// Connect transport to server BEFORE registering close handler
|
|
92
|
+
// This ensures connection is established before any cleanup can happen
|
|
93
|
+
try {
|
|
94
|
+
await server.connect(transport);
|
|
95
|
+
this.logger.debug(`SSE GET: server connected for session ${sessionId}`);
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
this.logger.error(`SSE GET: failed to connect for session ${sessionId}: ${error instanceof Error ? error.message : String(error)}`);
|
|
99
|
+
this.sessions.delete(sessionId);
|
|
100
|
+
if (!res.headersSent) {
|
|
101
|
+
res.writeHead(500).end("Internal Server Error");
|
|
102
|
+
}
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
// Register cleanup handler AFTER successful connection
|
|
106
|
+
res.on("close", () => {
|
|
107
|
+
console.error(`[SSE CLOSE] Connection closed for session ${sessionId}`);
|
|
108
|
+
this.sessions.delete(sessionId);
|
|
109
|
+
void transport.close();
|
|
110
|
+
void server.close();
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
async handlePost(req, res, url) {
|
|
114
|
+
const sessionId = (url?.searchParams.get("sessionId") || req.headers["x-session-id"] || "");
|
|
115
|
+
console.error(`[SSE POST] sessionId=${sessionId}, activeSessions=${this.sessions.size}, keys=[${Array.from(this.sessions.keys()).join(', ')}]`);
|
|
116
|
+
const entry = this.sessions.get(sessionId);
|
|
117
|
+
if (!entry) {
|
|
118
|
+
console.error(`[SSE POST] Invalid session ${sessionId} - session not found!`);
|
|
119
|
+
res.writeHead(400).end("Invalid session");
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
// Pass pre-parsed body from express.json() middleware (like reference implementation)
|
|
123
|
+
// express.json() already read and parsed the body into req.body
|
|
124
|
+
console.error(`[SSE POST] Calling handlePostMessage with req.body for session ${sessionId}`);
|
|
125
|
+
try {
|
|
126
|
+
await entry.transport.handlePostMessage(req, res, req.body);
|
|
127
|
+
console.error(`[SSE POST] Successfully processed for session ${sessionId}`);
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
console.error(`[SSE POST] FAILED for session ${sessionId}: ${error instanceof Error ? error.message : String(error)}`);
|
|
131
|
+
console.error(`[SSE POST] Error stack:`, error);
|
|
132
|
+
if (!res.headersSent) {
|
|
133
|
+
res.writeHead(500).end("Internal Server Error");
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
exports.SseServer = SseServer;
|
|
139
|
+
//# sourceMappingURL=SseServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SseServer.js","sourceRoot":"","sources":["../../../src/lib/servers/SseServer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AuthBroker } from "@mcp-abap-adt/auth-broker";
|
|
2
|
+
import type { Logger } from "@mcp-abap-adt/logger";
|
|
3
|
+
import { BaseMcpServer } from "./BaseMcpServer.js";
|
|
4
|
+
import { IHandlersRegistry } from "./handlers/interfaces.js";
|
|
5
|
+
export interface StdioServerOptions {
|
|
6
|
+
name?: string;
|
|
7
|
+
version?: string;
|
|
8
|
+
logger?: Logger;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Minimal stdio server implementation based on BaseMcpServer.
|
|
12
|
+
* Sets connection context once at startup and connects stdio transport.
|
|
13
|
+
*/
|
|
14
|
+
export declare class StdioServer extends BaseMcpServer {
|
|
15
|
+
private readonly handlersRegistry;
|
|
16
|
+
private readonly broker;
|
|
17
|
+
constructor(handlersRegistry: IHandlersRegistry, broker: AuthBroker, opts?: StdioServerOptions);
|
|
18
|
+
start(destination: string): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=StdioServer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StdioServer.d.ts","sourceRoot":"","sources":["../../../src/lib/servers/StdioServer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG7D,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,qBAAa,WAAY,SAAQ,aAAa;IAE1C,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,gBAAgB,EAAE,iBAAiB,EACnC,MAAM,EAAE,UAAU,EACnC,IAAI,CAAC,EAAE,kBAAkB;IASrB,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAOhD"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StdioServer = void 0;
|
|
4
|
+
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
5
|
+
const handlerLogger_js_1 = require("../handlerLogger.js");
|
|
6
|
+
const BaseMcpServer_js_1 = require("./BaseMcpServer.js");
|
|
7
|
+
const DEFAULT_VERSION = process.env.npm_package_version ?? "1.0.0";
|
|
8
|
+
/**
|
|
9
|
+
* Minimal stdio server implementation based on BaseMcpServer.
|
|
10
|
+
* Sets connection context once at startup and connects stdio transport.
|
|
11
|
+
*/
|
|
12
|
+
class StdioServer extends BaseMcpServer_js_1.BaseMcpServer {
|
|
13
|
+
handlersRegistry;
|
|
14
|
+
broker;
|
|
15
|
+
constructor(handlersRegistry, broker, opts) {
|
|
16
|
+
super({
|
|
17
|
+
name: opts?.name ?? "mcp-abap-adt",
|
|
18
|
+
version: opts?.version ?? DEFAULT_VERSION,
|
|
19
|
+
logger: opts?.logger ?? handlerLogger_js_1.noopLogger,
|
|
20
|
+
});
|
|
21
|
+
this.handlersRegistry = handlersRegistry;
|
|
22
|
+
this.broker = broker;
|
|
23
|
+
}
|
|
24
|
+
async start(destination) {
|
|
25
|
+
await this.setConnectionContext(destination, this.broker);
|
|
26
|
+
this.registerHandlers(this.handlersRegistry);
|
|
27
|
+
const transport = new stdio_js_1.StdioServerTransport();
|
|
28
|
+
await this.connect(transport);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.StdioServer = StdioServer;
|
|
32
|
+
//# sourceMappingURL=StdioServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StdioServer.js","sourceRoot":"","sources":["../../../src/lib/servers/StdioServer.ts"],"names":[],"mappings":";;;AAAA,wEAAiF;AAGjF,0DAAiD;AACjD,yDAAmD;AAEnD,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC;AAQnE;;;GAGG;AACH,MAAa,WAAY,SAAQ,gCAAa;IAEzB;IACA;IAFnB,YACmB,gBAAmC,EACnC,MAAkB,EACnC,IAAyB;QAEzB,KAAK,CAAC;YACJ,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,cAAc;YAClC,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,eAAe;YACzC,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,6BAAU;SACnC,CAAC,CAAC;QARc,qBAAgB,GAAhB,gBAAgB,CAAmB;QACnC,WAAM,GAAN,MAAM,CAAY;IAQrC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,WAAmB;QAC7B,MAAM,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAE7C,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAC;QAC7C,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC;CACF;AApBD,kCAoBC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Logger } from "@mcp-abap-adt/logger";
|
|
2
|
+
import { BaseMcpServer } from "./BaseMcpServer.js";
|
|
3
|
+
import { IHandlersRegistry } from "./handlers/interfaces.js";
|
|
4
|
+
import { AuthBrokerFactory } from "../authBrokerFactory.js";
|
|
5
|
+
export interface StreamableHttpServerOptions {
|
|
6
|
+
host?: string;
|
|
7
|
+
port?: number;
|
|
8
|
+
enableJsonResponse?: boolean;
|
|
9
|
+
defaultDestination?: string;
|
|
10
|
+
path?: string;
|
|
11
|
+
logger?: Logger;
|
|
12
|
+
version?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Minimal Streamable HTTP server implementation.
|
|
16
|
+
* Для кожного HTTP POST створюємо новий транспорт і прокидуємо запит у вже створений MCP сервер.
|
|
17
|
+
* Destination береться з header `x-mcp-destination` або з defaultDestination, інакше 400.
|
|
18
|
+
*/
|
|
19
|
+
export declare class StreamableHttpServer extends BaseMcpServer {
|
|
20
|
+
private readonly handlersRegistry;
|
|
21
|
+
private readonly authBrokerFactory;
|
|
22
|
+
private readonly host;
|
|
23
|
+
private readonly port;
|
|
24
|
+
private readonly enableJsonResponse;
|
|
25
|
+
private readonly defaultDestination?;
|
|
26
|
+
private readonly path;
|
|
27
|
+
constructor(handlersRegistry: IHandlersRegistry, authBrokerFactory: AuthBrokerFactory, opts?: StreamableHttpServerOptions);
|
|
28
|
+
start(): Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=StreamableHttpServer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StreamableHttpServer.d.ts","sourceRoot":"","sources":["../../../src/lib/servers/StreamableHttpServer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAG5D,MAAM,WAAW,2BAA2B;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,aAAa;IAQnD,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IARpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAU;IAC7C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;gBAGX,gBAAgB,EAAE,iBAAiB,EACnC,iBAAiB,EAAE,iBAAiB,EACrD,IAAI,CAAC,EAAE,2BAA2B;IAgB9B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAkD7B"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.StreamableHttpServer = void 0;
|
|
7
|
+
const express_1 = __importDefault(require("express"));
|
|
8
|
+
const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/server/streamableHttp.js");
|
|
9
|
+
const handlerLogger_js_1 = require("../handlerLogger.js");
|
|
10
|
+
const BaseMcpServer_js_1 = require("./BaseMcpServer.js");
|
|
11
|
+
const DEFAULT_VERSION = process.env.npm_package_version ?? "1.0.0";
|
|
12
|
+
/**
|
|
13
|
+
* Minimal Streamable HTTP server implementation.
|
|
14
|
+
* Для кожного HTTP POST створюємо новий транспорт і прокидуємо запит у вже створений MCP сервер.
|
|
15
|
+
* Destination береться з header `x-mcp-destination` або з defaultDestination, інакше 400.
|
|
16
|
+
*/
|
|
17
|
+
class StreamableHttpServer extends BaseMcpServer_js_1.BaseMcpServer {
|
|
18
|
+
handlersRegistry;
|
|
19
|
+
authBrokerFactory;
|
|
20
|
+
host;
|
|
21
|
+
port;
|
|
22
|
+
enableJsonResponse;
|
|
23
|
+
defaultDestination;
|
|
24
|
+
path;
|
|
25
|
+
constructor(handlersRegistry, authBrokerFactory, opts) {
|
|
26
|
+
super({
|
|
27
|
+
name: "mcp-abap-adt",
|
|
28
|
+
version: opts?.version ?? DEFAULT_VERSION,
|
|
29
|
+
logger: opts?.logger ?? handlerLogger_js_1.noopLogger,
|
|
30
|
+
});
|
|
31
|
+
this.handlersRegistry = handlersRegistry;
|
|
32
|
+
this.authBrokerFactory = authBrokerFactory;
|
|
33
|
+
this.host = opts?.host ?? "127.0.0.1";
|
|
34
|
+
this.port = opts?.port ?? 3000;
|
|
35
|
+
this.enableJsonResponse = opts?.enableJsonResponse ?? false;
|
|
36
|
+
this.defaultDestination = opts?.defaultDestination;
|
|
37
|
+
this.path = opts?.path ?? "/";
|
|
38
|
+
// Регіструємо хендлери один раз для спільного MCP сервера
|
|
39
|
+
this.registerHandlers(this.handlersRegistry);
|
|
40
|
+
}
|
|
41
|
+
async start() {
|
|
42
|
+
const app = (0, express_1.default)();
|
|
43
|
+
app.use(express_1.default.json());
|
|
44
|
+
const handle = async (req, res) => {
|
|
45
|
+
const destinationHeader = req.headers["x-mcp-destination"] ??
|
|
46
|
+
req.headers["X-MCP-Destination"];
|
|
47
|
+
const destination = destinationHeader || this.defaultDestination;
|
|
48
|
+
if (!destination) {
|
|
49
|
+
res.status(400).send("Destination not provided");
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
const broker = await this.authBrokerFactory.getOrCreateAuthBroker(destination);
|
|
54
|
+
if (!broker) {
|
|
55
|
+
res.status(400).send("Auth broker not available");
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
await this.setConnectionContext(destination, broker);
|
|
59
|
+
const transport = new streamableHttp_js_1.StreamableHTTPServerTransport({
|
|
60
|
+
sessionIdGenerator: undefined, // stateless mode to avoid ID collisions
|
|
61
|
+
enableJsonResponse: this.enableJsonResponse,
|
|
62
|
+
});
|
|
63
|
+
res.on("close", () => {
|
|
64
|
+
void transport.close();
|
|
65
|
+
});
|
|
66
|
+
await this.connect(transport);
|
|
67
|
+
await transport.handleRequest(req, res, req.body);
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
res.status(500).send("Internal Server Error");
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
app.get(this.path, handle);
|
|
74
|
+
app.post(this.path, handle);
|
|
75
|
+
await new Promise((resolve, reject) => {
|
|
76
|
+
const srv = app
|
|
77
|
+
.listen(this.port, this.host, () => resolve())
|
|
78
|
+
.on("error", reject);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.StreamableHttpServer = StreamableHttpServer;
|
|
83
|
+
//# sourceMappingURL=StreamableHttpServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StreamableHttpServer.js","sourceRoot":"","sources":["../../../src/lib/servers/StreamableHttpServer.ts"],"names":[],"mappings":"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"}
|