@reventlessdev/reventless-local 3.0.0-alpha.113
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 +1197 -0
- package/LICENSE +202 -0
- package/__mocks__/emptyModule.js +2 -0
- package/__mocks__/nodeSqlite.mjs +6 -0
- package/package.json +67 -0
- package/rescript.json +39 -0
- package/src/Platform.res +2162 -0
- package/src/Platform.res.mjs +3389 -0
- package/src/adapter/Api/LocalGraphQL_Adapter.res +29 -0
- package/src/adapter/Api/LocalGraphQL_Adapter.res.mjs +26 -0
- package/src/adapter/Api/LocalGraphQL_SubscriptionResolvers.res +146 -0
- package/src/adapter/Api/LocalGraphQL_SubscriptionResolvers.res.mjs +88 -0
- package/src/adapter/Auth/Auth_GraphqlContext.res +83 -0
- package/src/adapter/Auth/Auth_GraphqlContext.res.mjs +76 -0
- package/src/adapter/Auth/LocalAuth.res +239 -0
- package/src/adapter/Auth/LocalAuth.res.mjs +247 -0
- package/src/adapter/Auth/UserStore.res +134 -0
- package/src/adapter/Auth/UserStore.res.mjs +146 -0
- package/src/adapter/Backend.res +46 -0
- package/src/adapter/Backend.res.mjs +66 -0
- package/src/adapter/BackendState.res +34 -0
- package/src/adapter/BackendState.res.mjs +42 -0
- package/src/adapter/Cloner/LocalClonerRunner.res +13 -0
- package/src/adapter/Cloner/LocalClonerRunner.res.mjs +12 -0
- package/src/adapter/CommandGenerator/CommandGeneratorResolvers_GraphQL.res +329 -0
- package/src/adapter/CommandGenerator/CommandGeneratorResolvers_GraphQL.res.mjs +301 -0
- package/src/adapter/CommandGenerator/InboundTranslationResolvers_GraphQL.res +76 -0
- package/src/adapter/CommandGenerator/InboundTranslationResolvers_GraphQL.res.mjs +57 -0
- package/src/adapter/CommandGenerator/LocalCommandGeneratorResolvers.res +19 -0
- package/src/adapter/CommandGenerator/LocalCommandGeneratorResolvers.res.mjs +19 -0
- package/src/adapter/CommandTopic/LocalCommandTopicChannel.res +104 -0
- package/src/adapter/CommandTopic/LocalCommandTopicChannel.res.mjs +82 -0
- package/src/adapter/CommandTopic/LocalCommandTopicRemoteChannel.res +32 -0
- package/src/adapter/CommandTopic/LocalCommandTopicRemoteChannel.res.mjs +38 -0
- package/src/adapter/Counter/LocalCounterHandler.res +42 -0
- package/src/adapter/Counter/LocalCounterHandler.res.mjs +45 -0
- package/src/adapter/DcbEventLog/DcbEventLogStorage_InMemory.res +131 -0
- package/src/adapter/DcbEventLog/DcbEventLogStorage_InMemory.res.mjs +140 -0
- package/src/adapter/DcbEventLog/DcbEventLogStorage_Sqlite.res +334 -0
- package/src/adapter/DcbEventLog/DcbEventLogStorage_Sqlite.res.mjs +299 -0
- package/src/adapter/DomainGraphQL_Server.res +565 -0
- package/src/adapter/DomainGraphQL_Server.res.mjs +576 -0
- package/src/adapter/DomainMCP_Server.res +369 -0
- package/src/adapter/DomainMCP_Server.res.mjs +358 -0
- package/src/adapter/EventCollector/LocalEventCollectorChannel.res +87 -0
- package/src/adapter/EventCollector/LocalEventCollectorChannel.res.mjs +45 -0
- package/src/adapter/EventLog/EventLogStorage_InMemory.res +105 -0
- package/src/adapter/EventLog/EventLogStorage_InMemory.res.mjs +117 -0
- package/src/adapter/EventLog/EventLogStorage_Sqlite.res +145 -0
- package/src/adapter/EventLog/EventLogStorage_Sqlite.res.mjs +155 -0
- package/src/adapter/EventTopic/LocalEventTopicPublisher.res +36 -0
- package/src/adapter/EventTopic/LocalEventTopicPublisher.res.mjs +31 -0
- package/src/adapter/GraphQL_Server.res +6 -0
- package/src/adapter/GraphQL_Server.res.mjs +154 -0
- package/src/adapter/GraphQL_ServerInstance.res +310 -0
- package/src/adapter/GraphQL_ServerInstance.res.mjs +257 -0
- package/src/adapter/Heartbeat/LocalHeartbeatRunner.res +57 -0
- package/src/adapter/Heartbeat/LocalHeartbeatRunner.res.mjs +34 -0
- package/src/adapter/LocalBus.res +498 -0
- package/src/adapter/LocalBus.res.mjs +1011 -0
- package/src/adapter/LocalPluginSpec.res +16 -0
- package/src/adapter/LocalPluginSpec.res.mjs +33 -0
- package/src/adapter/LocalSideEffectHandler.res +44 -0
- package/src/adapter/LocalSideEffectHandler.res.mjs +34 -0
- package/src/adapter/MCP_Server.res +4 -0
- package/src/adapter/MCP_Server.res.mjs +67 -0
- package/src/adapter/MCP_ServerInstance.res +362 -0
- package/src/adapter/MCP_ServerInstance.res.mjs +313 -0
- package/src/adapter/PlatformGraphQL_Server.res +75 -0
- package/src/adapter/PlatformGraphQL_Server.res.mjs +84 -0
- package/src/adapter/PlatformMCP_Server.res +23 -0
- package/src/adapter/PlatformMCP_Server.res.mjs +46 -0
- package/src/adapter/QueryDb/QueryDbResolvers_GraphQL.res +793 -0
- package/src/adapter/QueryDb/QueryDbResolvers_GraphQL.res.mjs +569 -0
- package/src/adapter/QueryDb/QueryDbStorage_InMemory.res +242 -0
- package/src/adapter/QueryDb/QueryDbStorage_InMemory.res.mjs +241 -0
- package/src/adapter/QueryDb/QueryDbStorage_Sqlite.res +339 -0
- package/src/adapter/QueryDb/QueryDbStorage_Sqlite.res.mjs +318 -0
- package/src/adapter/QueryDb/SortKey_Filter.res +48 -0
- package/src/adapter/QueryDb/SortKey_Filter.res.mjs +46 -0
- package/src/adapter/QueryEngine/LocalQueryEngine.res +57 -0
- package/src/adapter/QueryEngine/LocalQueryEngine.res.mjs +56 -0
- package/src/adapter/Runtime/LocalAggregateRuntime_Builder.res +91 -0
- package/src/adapter/Runtime/LocalAggregateRuntime_Builder.res.mjs +50 -0
- package/src/adapter/Runtime/LocalEventCollectorRuntime_Builder.res +47 -0
- package/src/adapter/Runtime/LocalEventCollectorRuntime_Builder.res.mjs +37 -0
- package/src/adapter/Runtime/LocalPluginRuntime_Builder.res +11 -0
- package/src/adapter/Runtime/LocalPluginRuntime_Builder.res.mjs +30 -0
- package/src/adapter/Runtime/LocalRuntimeEnvironment.res +54 -0
- package/src/adapter/Runtime/LocalRuntimeEnvironment.res.mjs +40 -0
- package/src/adapter/Scheduler/LocalScheduledPublisher.res +102 -0
- package/src/adapter/Scheduler/LocalScheduledPublisher.res.mjs +84 -0
- package/src/adapter/SqliteDriver.res +52 -0
- package/src/adapter/SqliteDriver.res.mjs +76 -0
- package/src/adapter/SqliteDriver.resi +31 -0
- package/src/adapter/Task/LocalTaskBucket.res +75 -0
- package/src/adapter/Task/LocalTaskBucket.res.mjs +48 -0
- package/src/adapter/Task/TaskBucket_Sqlite.res +47 -0
- package/src/adapter/Task/TaskBucket_Sqlite.res.mjs +40 -0
- package/src/components/Aggregate_Builder.res +55 -0
- package/src/components/Aggregate_Builder.res.mjs +140 -0
- package/src/components/AutomationSlice_Builder.res +41 -0
- package/src/components/AutomationSlice_Builder.res.mjs +57 -0
- package/src/components/Counter_Builder.res +14 -0
- package/src/components/Counter_Builder.res.mjs +32 -0
- package/src/components/DcbEventLog_Builder.res +18 -0
- package/src/components/DcbEventLog_Builder.res.mjs +24 -0
- package/src/components/ExtensionPoint_Builder.res +25 -0
- package/src/components/ExtensionPoint_Builder.res.mjs +44 -0
- package/src/components/InboundTranslationSlice_Builder.res +34 -0
- package/src/components/InboundTranslationSlice_Builder.res.mjs +45 -0
- package/src/components/OutboundTranslationSlice_Builder.res +43 -0
- package/src/components/OutboundTranslationSlice_Builder.res.mjs +59 -0
- package/src/components/Plugin_Builder.res +37 -0
- package/src/components/Plugin_Builder.res.mjs +67 -0
- package/src/components/ReadModel_Builder.res +47 -0
- package/src/components/ReadModel_Builder.res.mjs +54 -0
- package/src/components/StateChangeSlice_Builder.res +19 -0
- package/src/components/StateChangeSlice_Builder.res.mjs +21 -0
- package/src/components/StateViewSlice_Builder.res +42 -0
- package/src/components/StateViewSlice_Builder.res.mjs +58 -0
- package/src/components/Task_Builder.res +28 -0
- package/src/components/Task_Builder.res.mjs +41 -0
- package/src/reexport/CommandTopic.res +3 -0
- package/src/reexport/CommandTopic.res.mjs +55 -0
- package/src/test/Mocks/MockDcbEventLogStorage.res +136 -0
- package/src/test/Mocks/MockDcbEventLogStorage.res.mjs +146 -0
- package/src/test/Mocks/MockEventLogStorage.res +57 -0
- package/src/test/Mocks/MockEventLogStorage.res.mjs +65 -0
- package/src/test/Mocks/MockPublisher.res +29 -0
- package/src/test/Mocks/MockPublisher.res.mjs +28 -0
- package/src/test/Mocks/MockQueryDbStorage.res +104 -0
- package/src/test/Mocks/MockQueryDbStorage.res.mjs +136 -0
- package/src/test/TestRunner.res +96 -0
- package/src/test/TestRunner.res.mjs +71 -0
- package/tests/SplitApiFixtures.res +84 -0
- package/tests/SplitApiFixtures.res.mjs +88 -0
- package/tests/SplitApiTest.res +102 -0
- package/tests/SplitApiTest.res.mjs +82 -0
- package/tests/TestFixtures.res +54 -0
- package/tests/TestFixtures.res.mjs +65 -0
- package/tests/adapter/BackendParityTest.res +94 -0
- package/tests/adapter/BackendParityTest.res.mjs +96 -0
- package/tests/adapter/CollectNEventsTest.res +82 -0
- package/tests/adapter/CollectNEventsTest.res.mjs +83 -0
- package/tests/adapter/CommandAuthorizationTest.res +200 -0
- package/tests/adapter/CommandAuthorizationTest.res.mjs +190 -0
- package/tests/adapter/CommandTopicChannelTest.res +174 -0
- package/tests/adapter/CommandTopicChannelTest.res.mjs +170 -0
- package/tests/adapter/CounterHandlerTest.res +113 -0
- package/tests/adapter/CounterHandlerTest.res.mjs +96 -0
- package/tests/adapter/DcbEventLogStorageSqliteTest.res +157 -0
- package/tests/adapter/DcbEventLogStorageSqliteTest.res.mjs +165 -0
- package/tests/adapter/DcbEventLogStorageTest.res +187 -0
- package/tests/adapter/DcbEventLogStorageTest.res.mjs +195 -0
- package/tests/adapter/EventCollectorChannelTest.res +166 -0
- package/tests/adapter/EventCollectorChannelTest.res.mjs +178 -0
- package/tests/adapter/EventLogStorageSqliteTest.res +105 -0
- package/tests/adapter/EventLogStorageSqliteTest.res.mjs +116 -0
- package/tests/adapter/EventTapTest.res +102 -0
- package/tests/adapter/EventTapTest.res.mjs +94 -0
- package/tests/adapter/EventTopicPublisherTest.res +76 -0
- package/tests/adapter/EventTopicPublisherTest.res.mjs +86 -0
- package/tests/adapter/GraphQL_SchemaInspectorTest.res +763 -0
- package/tests/adapter/GraphQL_SchemaInspectorTest.res.mjs +578 -0
- package/tests/adapter/GraphQL_SubscriptionResolversTest.res +161 -0
- package/tests/adapter/GraphQL_SubscriptionResolversTest.res.mjs +134 -0
- package/tests/adapter/HeartbeatRunnerTest.res +136 -0
- package/tests/adapter/HeartbeatRunnerTest.res.mjs +96 -0
- package/tests/adapter/LocalAuthHttpTest.res +224 -0
- package/tests/adapter/LocalAuthHttpTest.res.mjs +237 -0
- package/tests/adapter/LocalAuthLoginTest.res +180 -0
- package/tests/adapter/LocalAuthLoginTest.res.mjs +207 -0
- package/tests/adapter/LocalAuthTest.res +106 -0
- package/tests/adapter/LocalAuthTest.res.mjs +145 -0
- package/tests/adapter/LocalAuthUserStoreTest.res +172 -0
- package/tests/adapter/LocalAuthUserStoreTest.res.mjs +208 -0
- package/tests/adapter/LocalBusBoundedTest.res +157 -0
- package/tests/adapter/LocalBusBoundedTest.res.mjs +168 -0
- package/tests/adapter/LocalBusPubSubTest.res +81 -0
- package/tests/adapter/LocalBusPubSubTest.res.mjs +81 -0
- package/tests/adapter/QueryDbGsiTtlTest.res +268 -0
- package/tests/adapter/QueryDbGsiTtlTest.res.mjs +209 -0
- package/tests/adapter/QueryDbListResolverTest.res +361 -0
- package/tests/adapter/QueryDbListResolverTest.res.mjs +426 -0
- package/tests/adapter/QueryDbStorageSqliteTest.res +159 -0
- package/tests/adapter/QueryDbStorageSqliteTest.res.mjs +126 -0
- package/tests/adapter/QueryDbStorageTest.res +171 -0
- package/tests/adapter/QueryDbStorageTest.res.mjs +170 -0
- package/tests/adapter/QueryEngineTest.res +152 -0
- package/tests/adapter/QueryEngineTest.res.mjs +148 -0
- package/tests/adapter/ScheduledPublisherTest.res +199 -0
- package/tests/adapter/ScheduledPublisherTest.res.mjs +203 -0
- package/tests/adapter/SortKey_FilterTest.res +103 -0
- package/tests/adapter/SortKey_FilterTest.res.mjs +135 -0
- package/tests/adapter/SqliteDriverTest.res +86 -0
- package/tests/adapter/SqliteDriverTest.res.mjs +101 -0
- package/tests/adapter/TaskBucketSqliteTest.res +44 -0
- package/tests/adapter/TaskBucketSqliteTest.res.mjs +40 -0
- package/tests/adapter/TaskBucketTest.res +106 -0
- package/tests/adapter/TaskBucketTest.res.mjs +118 -0
- package/tests/components/aggregate/AggregateFixtures.res +78 -0
- package/tests/components/aggregate/AggregateFixtures.res.mjs +109 -0
- package/tests/components/aggregate/AggregateTest.res +129 -0
- package/tests/components/aggregate/AggregateTest.res.mjs +129 -0
- package/tests/components/automationslice/AutomationSliceCallbackTest.res +212 -0
- package/tests/components/automationslice/AutomationSliceCallbackTest.res.mjs +233 -0
- package/tests/components/automationslice/AutomationSliceFixtures.res +189 -0
- package/tests/components/automationslice/AutomationSliceFixtures.res.mjs +276 -0
- package/tests/components/automationslice/AutomationSliceSelfDeadlockFixtures.res +289 -0
- package/tests/components/automationslice/AutomationSliceSelfDeadlockFixtures.res.mjs +453 -0
- package/tests/components/automationslice/AutomationSliceSelfDeadlockTest.res +47 -0
- package/tests/components/automationslice/AutomationSliceSelfDeadlockTest.res.mjs +31 -0
- package/tests/components/automationslice/MixedSourceAutomationSliceFixtures.res +213 -0
- package/tests/components/automationslice/MixedSourceAutomationSliceFixtures.res.mjs +268 -0
- package/tests/components/automationslice/MixedSourceAutomationSliceTest.res +118 -0
- package/tests/components/automationslice/MixedSourceAutomationSliceTest.res.mjs +99 -0
- package/tests/components/commandgenerator/CommandGeneratorFixtures.res +73 -0
- package/tests/components/commandgenerator/CommandGeneratorFixtures.res.mjs +109 -0
- package/tests/components/commandgenerator/CommandGeneratorTest.res +43 -0
- package/tests/components/commandgenerator/CommandGeneratorTest.res.mjs +46 -0
- package/tests/components/commandtopic/CommandTopicFixtures.res +37 -0
- package/tests/components/commandtopic/CommandTopicFixtures.res.mjs +68 -0
- package/tests/components/commandtopic/CommandTopicStreamFixtures.res +43 -0
- package/tests/components/commandtopic/CommandTopicStreamFixtures.res.mjs +91 -0
- package/tests/components/commandtopic/CommandTopicStreamTest.res +30 -0
- package/tests/components/commandtopic/CommandTopicStreamTest.res.mjs +35 -0
- package/tests/components/commandtopic/CommandTopicTest.res +55 -0
- package/tests/components/commandtopic/CommandTopicTest.res.mjs +62 -0
- package/tests/components/counter/CounterFixtures.res +42 -0
- package/tests/components/counter/CounterFixtures.res.mjs +34 -0
- package/tests/components/counter/CounterTest.res +46 -0
- package/tests/components/counter/CounterTest.res.mjs +61 -0
- package/tests/components/dcb/DcbCrossPartitionFixtures.res +170 -0
- package/tests/components/dcb/DcbCrossPartitionFixtures.res.mjs +276 -0
- package/tests/components/dcb/DcbCrossPartitionReadTest.res +68 -0
- package/tests/components/dcb/DcbCrossPartitionReadTest.res.mjs +78 -0
- package/tests/components/dcb/DcbEventLogAppendStreamTest.res +72 -0
- package/tests/components/dcb/DcbEventLogAppendStreamTest.res.mjs +82 -0
- package/tests/components/dcb/DcbEventLogStreamTest.res +103 -0
- package/tests/components/dcb/DcbEventLogStreamTest.res.mjs +91 -0
- package/tests/components/dcb/DcbFixtures.res +145 -0
- package/tests/components/dcb/DcbFixtures.res.mjs +221 -0
- package/tests/components/dcb/DcbTest.res +55 -0
- package/tests/components/dcb/DcbTest.res.mjs +55 -0
- package/tests/components/eventcollector/EventCollectorFixtures.res +42 -0
- package/tests/components/eventcollector/EventCollectorFixtures.res.mjs +49 -0
- package/tests/components/eventcollector/EventCollectorTest.res +37 -0
- package/tests/components/eventcollector/EventCollectorTest.res.mjs +36 -0
- package/tests/components/eventlog/EventLogAppendStreamTest.res +93 -0
- package/tests/components/eventlog/EventLogAppendStreamTest.res.mjs +113 -0
- package/tests/components/eventlog/EventLogConflictTest.res +86 -0
- package/tests/components/eventlog/EventLogConflictTest.res.mjs +81 -0
- package/tests/components/eventlog/EventLogFixtures.res +52 -0
- package/tests/components/eventlog/EventLogFixtures.res.mjs +80 -0
- package/tests/components/eventlog/EventLogStreamTest.res +98 -0
- package/tests/components/eventlog/EventLogStreamTest.res.mjs +142 -0
- package/tests/components/eventlog/EventLogTest.res +53 -0
- package/tests/components/eventlog/EventLogTest.res.mjs +74 -0
- package/tests/components/eventtopic/EventTopicFixtures.res +47 -0
- package/tests/components/eventtopic/EventTopicFixtures.res.mjs +77 -0
- package/tests/components/eventtopic/EventTopicStreamFixtures.res +27 -0
- package/tests/components/eventtopic/EventTopicStreamFixtures.res.mjs +62 -0
- package/tests/components/eventtopic/EventTopicStreamTest.res +35 -0
- package/tests/components/eventtopic/EventTopicStreamTest.res.mjs +44 -0
- package/tests/components/eventtopic/EventTopicTest.res +35 -0
- package/tests/components/eventtopic/EventTopicTest.res.mjs +43 -0
- package/tests/components/extensionpoint/ExtensionPointFixtures.res +145 -0
- package/tests/components/extensionpoint/ExtensionPointFixtures.res.mjs +188 -0
- package/tests/components/extensionpoint/ExtensionPointTest.res +62 -0
- package/tests/components/extensionpoint/ExtensionPointTest.res.mjs +55 -0
- package/tests/components/heartbeat/HeartbeatFixtures.res +48 -0
- package/tests/components/heartbeat/HeartbeatFixtures.res.mjs +46 -0
- package/tests/components/heartbeat/HeartbeatTest.res +67 -0
- package/tests/components/heartbeat/HeartbeatTest.res.mjs +65 -0
- package/tests/components/inboundtranslationslice/InboundTranslationSliceCallbackTest.res +241 -0
- package/tests/components/inboundtranslationslice/InboundTranslationSliceCallbackTest.res.mjs +239 -0
- package/tests/components/inboundtranslationslice/InboundTranslationSliceFixtures.res +36 -0
- package/tests/components/inboundtranslationslice/InboundTranslationSliceFixtures.res.mjs +73 -0
- package/tests/components/outboundtranslationslice/OutboundTranslationSliceCallbackTest.res +191 -0
- package/tests/components/outboundtranslationslice/OutboundTranslationSliceCallbackTest.res.mjs +297 -0
- package/tests/components/outboundtranslationslice/OutboundTranslationSliceFixtures.res +78 -0
- package/tests/components/outboundtranslationslice/OutboundTranslationSliceFixtures.res.mjs +137 -0
- package/tests/components/querydb/QueryDbFixtures.res +39 -0
- package/tests/components/querydb/QueryDbFixtures.res.mjs +73 -0
- package/tests/components/querydb/QueryDbSubIdFixtures.res +44 -0
- package/tests/components/querydb/QueryDbSubIdFixtures.res.mjs +80 -0
- package/tests/components/querydb/QueryDbSubIdTest.res +104 -0
- package/tests/components/querydb/QueryDbSubIdTest.res.mjs +104 -0
- package/tests/components/querydb/QueryDbTest.res +81 -0
- package/tests/components/querydb/QueryDbTest.res.mjs +126 -0
- package/tests/components/readmodel/DcbReadModelE2EFixtures.res +215 -0
- package/tests/components/readmodel/DcbReadModelE2EFixtures.res.mjs +308 -0
- package/tests/components/readmodel/DcbReadModelE2ETest.res +45 -0
- package/tests/components/readmodel/DcbReadModelE2ETest.res.mjs +37 -0
- package/tests/components/readmodel/DcbReadModelTypoFailFastTest.res +88 -0
- package/tests/components/readmodel/DcbReadModelTypoFailFastTest.res.mjs +152 -0
- package/tests/components/readmodel/MixedSourceReadModelFixtures.res +181 -0
- package/tests/components/readmodel/MixedSourceReadModelFixtures.res.mjs +277 -0
- package/tests/components/readmodel/MixedSourceReadModelTest.res +61 -0
- package/tests/components/readmodel/MixedSourceReadModelTest.res.mjs +68 -0
- package/tests/components/readmodel/ReadModelFixtures.res +138 -0
- package/tests/components/readmodel/ReadModelFixtures.res.mjs +169 -0
- package/tests/components/readmodel/ReadModelTest.res +46 -0
- package/tests/components/readmodel/ReadModelTest.res.mjs +36 -0
- package/tests/components/scheduler/SchedulerFixtures.res +59 -0
- package/tests/components/scheduler/SchedulerFixtures.res.mjs +63 -0
- package/tests/components/scheduler/SchedulerTest.res +76 -0
- package/tests/components/scheduler/SchedulerTest.res.mjs +86 -0
- package/tests/components/sideeffecthandler/SideEffectHandlerFixtures.res +133 -0
- package/tests/components/sideeffecthandler/SideEffectHandlerFixtures.res.mjs +149 -0
- package/tests/components/sideeffecthandler/SideEffectHandlerTest.res +39 -0
- package/tests/components/sideeffecthandler/SideEffectHandlerTest.res.mjs +28 -0
- package/tests/components/stateviewslice/StateViewSliceFixtures.res +117 -0
- package/tests/components/stateviewslice/StateViewSliceFixtures.res.mjs +188 -0
- package/tests/components/stateviewslice/StateViewSliceSubIdFixtures.res +117 -0
- package/tests/components/stateviewslice/StateViewSliceSubIdFixtures.res.mjs +183 -0
- package/tests/components/stateviewslice/StateViewSliceSubIdTest.res +78 -0
- package/tests/components/stateviewslice/StateViewSliceSubIdTest.res.mjs +107 -0
- package/tests/components/stateviewslice/StateViewSliceTest.res +59 -0
- package/tests/components/stateviewslice/StateViewSliceTest.res.mjs +72 -0
- package/tests/components/task/TaskFixtures.res +87 -0
- package/tests/components/task/TaskFixtures.res.mjs +82 -0
- package/tests/components/task/TaskTest.res +98 -0
- package/tests/components/task/TaskTest.res.mjs +46 -0
- package/tests/plugin/PluginBehavior_GWT.res +146 -0
- package/tests/plugin/PluginBehavior_GWT.res.mjs +281 -0
- package/tests/plugin/Plugin_Fixtures.res +61 -0
- package/tests/plugin/Plugin_Fixtures.res.mjs +105 -0
- package/tests/plugin/PluginsProjection_GWT.res +95 -0
- package/tests/plugin/PluginsProjection_GWT.res.mjs +120 -0
- package/tests/plugin/UIFragmentRegistryProjection_GWT.res +72 -0
- package/tests/plugin/UIFragmentRegistryProjection_GWT.res.mjs +117 -0
- package/tests/setup/sqliteGlobal.cjs +12 -0
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
|
+
|
|
3
|
+
import * as S from "sury/src/S.res.mjs";
|
|
4
|
+
import * as Http from "http";
|
|
5
|
+
import * as Stdlib_JsExn from "@rescript/runtime/lib/es6/Stdlib_JsExn.js";
|
|
6
|
+
import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
|
|
7
|
+
import * as McpSdk_Helpers from "@reventlessdev/rescript-mcp-sdk/src/McpSdk_Helpers.res.mjs";
|
|
8
|
+
import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.js";
|
|
9
|
+
import * as Identity$Reventless from "@reventlessdev/reventless-spec/src/types/Identity.res.mjs";
|
|
10
|
+
import * as Primitive_exceptions from "@rescript/runtime/lib/es6/Primitive_exceptions.js";
|
|
11
|
+
import * as Logger$ReventlessCore from "@reventlessdev/reventless-core/src/util/Logger.res.mjs";
|
|
12
|
+
import * as MCP_SchemaGenerator$ReventlessCore from "@reventlessdev/reventless-core/src/components/Api/MCP_SchemaGenerator.res.mjs";
|
|
13
|
+
import * as IndexJs from "@modelcontextprotocol/sdk/server/index.js";
|
|
14
|
+
import * as StreamableHttpJs from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
15
|
+
|
|
16
|
+
let log = Logger$ReventlessCore.fromEnv();
|
|
17
|
+
|
|
18
|
+
let debug = Stdlib_Option.isSome(process.env["MCP_DEBUG"]);
|
|
19
|
+
|
|
20
|
+
function make(labelOpt) {
|
|
21
|
+
let label = labelOpt !== undefined ? labelOpt : "MCP";
|
|
22
|
+
let tools = {
|
|
23
|
+
contents: {}
|
|
24
|
+
};
|
|
25
|
+
let resources = {
|
|
26
|
+
contents: {}
|
|
27
|
+
};
|
|
28
|
+
let resourceTemplates = {
|
|
29
|
+
contents: {}
|
|
30
|
+
};
|
|
31
|
+
let activeServer = {
|
|
32
|
+
contents: undefined
|
|
33
|
+
};
|
|
34
|
+
let registerTool = (name, definition, handler) => {
|
|
35
|
+
tools.contents[name] = {
|
|
36
|
+
definition: definition,
|
|
37
|
+
handler: handler
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
let registerResource = (name, definition, handler) => {
|
|
41
|
+
resources.contents[name] = {
|
|
42
|
+
definition: definition,
|
|
43
|
+
handler: handler
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
let registerResourceTemplate = (name, definition, handler) => {
|
|
47
|
+
resourceTemplates.contents[name] = {
|
|
48
|
+
definition: definition,
|
|
49
|
+
handler: handler
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
let registerToolsFromEntries = (pluginName, mutationEntries, commandHandler) => {
|
|
53
|
+
let toolDefs = MCP_SchemaGenerator$ReventlessCore.generateTools(pluginName, mutationEntries);
|
|
54
|
+
toolDefs.forEach(def => {
|
|
55
|
+
let handler = async (args, identity) => {
|
|
56
|
+
try {
|
|
57
|
+
return McpSdk_Helpers.toolResult(await commandHandler(def.name, args, identity));
|
|
58
|
+
} catch (raw_exn) {
|
|
59
|
+
let exn = Primitive_exceptions.internalToException(raw_exn);
|
|
60
|
+
return McpSdk_Helpers.toolError(Stdlib_Option.getOr(Stdlib_Option.flatMap(Stdlib_JsExn.fromException(exn), Stdlib_JsExn.message), "Command failed"));
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
registerTool(def.name, def, handler);
|
|
64
|
+
});
|
|
65
|
+
};
|
|
66
|
+
let registerResourcesFromEntries = (pluginName, queryEntries, queryHandler) => {
|
|
67
|
+
let resourceDefs = MCP_SchemaGenerator$ReventlessCore.generateResources(pluginName, queryEntries);
|
|
68
|
+
resourceDefs.forEach(def => {
|
|
69
|
+
let handler = async uri => {
|
|
70
|
+
let result = await queryHandler(def.name, uri);
|
|
71
|
+
return {
|
|
72
|
+
contents: [{
|
|
73
|
+
uri: uri,
|
|
74
|
+
text: JSON.stringify(result)
|
|
75
|
+
}]
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
if (def.uriTemplate.includes("{")) {
|
|
79
|
+
return registerResourceTemplate(def.name, def, handler);
|
|
80
|
+
} else {
|
|
81
|
+
return registerResource(def.name, def, handler);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
let registerEventHistoryResourcesFromEntries = (pluginName, eventLogEntries, eventLogHandler) => {
|
|
86
|
+
let resourceDefs = MCP_SchemaGenerator$ReventlessCore.generateEventHistoryResources(pluginName, eventLogEntries);
|
|
87
|
+
resourceDefs.forEach(def => {
|
|
88
|
+
let handler = async uri => {
|
|
89
|
+
let result = await eventLogHandler(def.name, uri);
|
|
90
|
+
return {
|
|
91
|
+
contents: [{
|
|
92
|
+
uri: uri,
|
|
93
|
+
text: JSON.stringify(result)
|
|
94
|
+
}]
|
|
95
|
+
};
|
|
96
|
+
};
|
|
97
|
+
registerResourceTemplate(def.name, def, handler);
|
|
98
|
+
});
|
|
99
|
+
};
|
|
100
|
+
let extractIdentity = req => {
|
|
101
|
+
try {
|
|
102
|
+
let headers = req.headers;
|
|
103
|
+
let json = headers["x-identity"];
|
|
104
|
+
if (json !== undefined) {
|
|
105
|
+
return S.parseOrThrow(JSON.parse(json), Identity$Reventless.schema);
|
|
106
|
+
} else {
|
|
107
|
+
return Identity$Reventless.anonymous;
|
|
108
|
+
}
|
|
109
|
+
} catch (exn) {
|
|
110
|
+
return Identity$Reventless.anonymous;
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
let createServerInstance = identity => {
|
|
114
|
+
let server = new IndexJs.Server({
|
|
115
|
+
name: `reventless-` + label.toLowerCase(),
|
|
116
|
+
version: "1.0.0"
|
|
117
|
+
}, {
|
|
118
|
+
capabilities: {
|
|
119
|
+
tools: {
|
|
120
|
+
_placeholder: false
|
|
121
|
+
},
|
|
122
|
+
resources: {
|
|
123
|
+
_placeholder: false
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
McpSdk_Helpers.onListTools(server, async () => {
|
|
128
|
+
let toolDefs = Object.values(tools.contents).map(param => {
|
|
129
|
+
let definition = param.definition;
|
|
130
|
+
return {
|
|
131
|
+
name: definition.name,
|
|
132
|
+
description: definition.description,
|
|
133
|
+
inputSchema: definition.inputSchema
|
|
134
|
+
};
|
|
135
|
+
});
|
|
136
|
+
return {
|
|
137
|
+
tools: toolDefs
|
|
138
|
+
};
|
|
139
|
+
});
|
|
140
|
+
McpSdk_Helpers.onCallTool(server, async req => {
|
|
141
|
+
let toolName = req.params.name;
|
|
142
|
+
let args = Stdlib_Option.getOr(req.params.arguments, null);
|
|
143
|
+
if (debug) {
|
|
144
|
+
log.info(label, undefined, `tools/call: ` + toolName);
|
|
145
|
+
}
|
|
146
|
+
let match = tools.contents[toolName];
|
|
147
|
+
if (match !== undefined) {
|
|
148
|
+
return await match.handler(args, identity);
|
|
149
|
+
} else {
|
|
150
|
+
return McpSdk_Helpers.toolError(`Unknown tool: ` + toolName);
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
McpSdk_Helpers.onListResources(server, async () => {
|
|
154
|
+
let resourceDefs = Object.values(resources.contents).map(param => {
|
|
155
|
+
let definition = param.definition;
|
|
156
|
+
return {
|
|
157
|
+
uri: definition.uriTemplate,
|
|
158
|
+
name: definition.name,
|
|
159
|
+
description: definition.description,
|
|
160
|
+
mimeType: definition.mimeType
|
|
161
|
+
};
|
|
162
|
+
});
|
|
163
|
+
return {
|
|
164
|
+
resources: resourceDefs
|
|
165
|
+
};
|
|
166
|
+
});
|
|
167
|
+
McpSdk_Helpers.onListResourceTemplates(server, async () => {
|
|
168
|
+
let templateDefs = Object.values(resourceTemplates.contents).map(param => {
|
|
169
|
+
let definition = param.definition;
|
|
170
|
+
return {
|
|
171
|
+
uriTemplate: definition.uriTemplate,
|
|
172
|
+
name: definition.name,
|
|
173
|
+
description: definition.description,
|
|
174
|
+
mimeType: definition.mimeType
|
|
175
|
+
};
|
|
176
|
+
});
|
|
177
|
+
return {
|
|
178
|
+
resourceTemplates: templateDefs
|
|
179
|
+
};
|
|
180
|
+
});
|
|
181
|
+
McpSdk_Helpers.onReadResource(server, async req => {
|
|
182
|
+
let uri = req.params.uri;
|
|
183
|
+
if (debug) {
|
|
184
|
+
log.info(label, undefined, `resources/read: ` + uri);
|
|
185
|
+
}
|
|
186
|
+
let matchedResource = Object.values(resources.contents).find(param => uri.includes(param.definition.name));
|
|
187
|
+
if (matchedResource !== undefined) {
|
|
188
|
+
if (debug) {
|
|
189
|
+
log.debug(label, undefined, `matched resource: ` + matchedResource.definition.name);
|
|
190
|
+
}
|
|
191
|
+
return await matchedResource.handler(uri);
|
|
192
|
+
}
|
|
193
|
+
let matchedTemplate = Object.values(resourceTemplates.contents).find(param => uri.includes(param.definition.name));
|
|
194
|
+
if (matchedTemplate !== undefined) {
|
|
195
|
+
if (debug) {
|
|
196
|
+
log.debug(label, undefined, `matched template: ` + matchedTemplate.definition.name);
|
|
197
|
+
}
|
|
198
|
+
return await matchedTemplate.handler(uri);
|
|
199
|
+
} else {
|
|
200
|
+
return {
|
|
201
|
+
contents: [{
|
|
202
|
+
uri: uri,
|
|
203
|
+
text: `{"error": "Resource not found: ` + uri + `"}`
|
|
204
|
+
}]
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
return server;
|
|
209
|
+
};
|
|
210
|
+
let start = (portOpt, param) => {
|
|
211
|
+
let port = portOpt !== undefined ? portOpt : 3001;
|
|
212
|
+
let httpServer = Http.createServer((req, res) => {
|
|
213
|
+
(async () => {
|
|
214
|
+
let reqMethod = req.method;
|
|
215
|
+
let reqUrl = req.url;
|
|
216
|
+
res.setHeader("Access-Control-Allow-Origin", "*");
|
|
217
|
+
res.setHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, OPTIONS");
|
|
218
|
+
res.setHeader("Access-Control-Allow-Headers", "Content-Type");
|
|
219
|
+
if (reqUrl === "/mcp" || reqUrl.startsWith("/mcp?")) {
|
|
220
|
+
switch (reqMethod) {
|
|
221
|
+
case "DELETE" :
|
|
222
|
+
res.statusCode = 200;
|
|
223
|
+
res.end();
|
|
224
|
+
return;
|
|
225
|
+
case "GET" :
|
|
226
|
+
res.setHeader("Content-Type", "text/plain");
|
|
227
|
+
res.end(label + ` server running`);
|
|
228
|
+
return;
|
|
229
|
+
case "OPTIONS" :
|
|
230
|
+
res.statusCode = 204;
|
|
231
|
+
res.end();
|
|
232
|
+
return;
|
|
233
|
+
case "POST" :
|
|
234
|
+
let body = await McpSdk_Helpers.parseJsonBody(req);
|
|
235
|
+
let identity = extractIdentity(req);
|
|
236
|
+
let server = createServerInstance(identity);
|
|
237
|
+
let transport = new StreamableHttpJs.StreamableHTTPServerTransport({
|
|
238
|
+
enableJsonResponse: true
|
|
239
|
+
});
|
|
240
|
+
await server.connect(transport);
|
|
241
|
+
await transport.handleRequest(req, res, body);
|
|
242
|
+
return;
|
|
243
|
+
default:
|
|
244
|
+
res.statusCode = 405;
|
|
245
|
+
res.end("Method not allowed");
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
} else {
|
|
249
|
+
res.statusCode = 404;
|
|
250
|
+
res.end("Not found");
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
})();
|
|
254
|
+
});
|
|
255
|
+
httpServer.listen(port, () => log.info(label, undefined, `listening on http://localhost:` + port.toString() + `/mcp`));
|
|
256
|
+
activeServer.contents = Primitive_option.some(httpServer);
|
|
257
|
+
};
|
|
258
|
+
let stop = () => {
|
|
259
|
+
let server = activeServer.contents;
|
|
260
|
+
if (server !== undefined) {
|
|
261
|
+
Primitive_option.valFromOption(server).close(() => {});
|
|
262
|
+
activeServer.contents = undefined;
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
};
|
|
266
|
+
let reset = () => {
|
|
267
|
+
tools.contents = {};
|
|
268
|
+
resources.contents = {};
|
|
269
|
+
resourceTemplates.contents = {};
|
|
270
|
+
};
|
|
271
|
+
let diagnostics = () => {
|
|
272
|
+
let toolNames = Object.keys(tools.contents);
|
|
273
|
+
let resourceNames = Object.keys(resources.contents).concat(Object.keys(resourceTemplates.contents));
|
|
274
|
+
return {
|
|
275
|
+
registeredTools: toolNames,
|
|
276
|
+
registeredResources: resourceNames,
|
|
277
|
+
toolCount: toolNames.length,
|
|
278
|
+
resourceCount: resourceNames.length,
|
|
279
|
+
serverRunning: Stdlib_Option.isSome(activeServer.contents)
|
|
280
|
+
};
|
|
281
|
+
};
|
|
282
|
+
let printDiagnostics = () => {
|
|
283
|
+
let d = diagnostics();
|
|
284
|
+
log.info(label, undefined, "diagnostics");
|
|
285
|
+
log.info(label, undefined, ` tools (` + d.toolCount.toString() + `):`);
|
|
286
|
+
d.registeredTools.forEach(t => log.info(label, undefined, ` - ` + t));
|
|
287
|
+
log.info(label, undefined, ` resources (` + d.resourceCount.toString() + `):`);
|
|
288
|
+
d.registeredResources.forEach(r => log.info(label, undefined, ` - ` + r));
|
|
289
|
+
log.info(label, undefined, ` server running: ` + (
|
|
290
|
+
d.serverRunning ? "yes" : "no"
|
|
291
|
+
));
|
|
292
|
+
};
|
|
293
|
+
return {
|
|
294
|
+
registerTool: registerTool,
|
|
295
|
+
registerResource: registerResource,
|
|
296
|
+
registerResourceTemplate: registerResourceTemplate,
|
|
297
|
+
registerToolsFromEntries: registerToolsFromEntries,
|
|
298
|
+
registerResourcesFromEntries: registerResourcesFromEntries,
|
|
299
|
+
registerEventHistoryResourcesFromEntries: registerEventHistoryResourcesFromEntries,
|
|
300
|
+
start: start,
|
|
301
|
+
stop: stop,
|
|
302
|
+
reset: reset,
|
|
303
|
+
diagnostics: diagnostics,
|
|
304
|
+
printDiagnostics: printDiagnostics
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
export {
|
|
309
|
+
log,
|
|
310
|
+
debug,
|
|
311
|
+
make,
|
|
312
|
+
}
|
|
313
|
+
/* log Not a pure module */
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
// Platform (admin-facing) in-memory GraphQL server — singleton.
|
|
2
|
+
// Serves admin/core operations on a separate port in split mode (port 4001).
|
|
3
|
+
//
|
|
4
|
+
// Uses the same GraphQL_ServerInstance factory as the generic instance,
|
|
5
|
+
// but is exposed as a named singleton so Platform.res can reference it
|
|
6
|
+
// directly (mirroring the AWS PlatformAPI resource pattern).
|
|
7
|
+
//
|
|
8
|
+
// Does NOT include Relay-specific features (encodeGlobalId, node resolver)
|
|
9
|
+
// since admin queries are not Relay-paginated.
|
|
10
|
+
//
|
|
11
|
+
// Authorization: every query AND mutation resolver registered here is
|
|
12
|
+
// wrapped with `Auth_GraphqlContext.requireGroup(~group="Admin")` so
|
|
13
|
+
// non-Admin identities raise an `UNAUTHORIZED` GraphQLError before the
|
|
14
|
+
// underlying resolver runs. Mirrors AppSync's
|
|
15
|
+
// `@aws_auth(cognito_groups: ["Admin"])` directive that gates Platform_*
|
|
16
|
+
// fields in the AWS adapter.
|
|
17
|
+
//
|
|
18
|
+
// Mutations are wrapped (in addition to their per-command
|
|
19
|
+
// `commandAuthorization` rule inside `CommandGeneratorResolvers_GraphQL.register`)
|
|
20
|
+
// because the per-command rule defaults to `AllowAuthenticated` and the
|
|
21
|
+
// in-memory adapter falls back to `defaultUser` on missing-bearer requests
|
|
22
|
+
// — without the wrapper, anonymous callers could trigger admin mutations
|
|
23
|
+
// (Plugin_Activate / _Deactivate, etc.) just by hitting the platform port.
|
|
24
|
+
|
|
25
|
+
let instance: GraphQL_ServerInstance.t = GraphQL_ServerInstance.make(~label="GraphQL:Platform")
|
|
26
|
+
|
|
27
|
+
// Wrap a resolver dict so every value enforces the Admin group. Keys are
|
|
28
|
+
// preserved; resolvers fall through to the underlying instance once the
|
|
29
|
+
// group check passes.
|
|
30
|
+
let wrapAdmin = (
|
|
31
|
+
resolvers: dict<GraphQL_ServerInstance.resolverFn>,
|
|
32
|
+
): dict<GraphQL_ServerInstance.resolverFn> => {
|
|
33
|
+
let wrapped = Dict.make()
|
|
34
|
+
resolvers->Dict.toArray->Array.forEach(((k, v)) =>
|
|
35
|
+
wrapped->Dict.set(k, Auth_GraphqlContext.requireGroup(~group="Admin", v))
|
|
36
|
+
)
|
|
37
|
+
wrapped
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
let registerMutations = (~sdlFields, ~resolvers) =>
|
|
41
|
+
instance.registerMutations(~sdlFields, ~resolvers=wrapAdmin(resolvers))
|
|
42
|
+
let registerQueries = (~sdlFields, ~resolvers) =>
|
|
43
|
+
instance.registerQueries(~sdlFields, ~resolvers=wrapAdmin(resolvers))
|
|
44
|
+
let registerSubscriptions = instance.registerSubscriptions
|
|
45
|
+
let registerTypes = instance.registerTypes
|
|
46
|
+
let getMutationResolver = instance.getMutationResolver
|
|
47
|
+
let getQueryResolver = instance.getQueryResolver
|
|
48
|
+
let start = instance.start
|
|
49
|
+
let stop = instance.stop
|
|
50
|
+
let reset = instance.reset
|
|
51
|
+
let buildSdl = instance.buildSdl
|
|
52
|
+
let getFullSdl = instance.getFullSdl
|
|
53
|
+
let getSchema = instance.getSchema
|
|
54
|
+
let diagnostics = instance.diagnostics
|
|
55
|
+
let printDiagnostics = instance.printDiagnostics
|
|
56
|
+
|
|
57
|
+
// Expose as GraphQL_ServerInstance.t for resolveTargetGraphQL() in Platform.res.
|
|
58
|
+
// `registerQueries` is the wrapped version so admin auth fires regardless of
|
|
59
|
+
// whether callers reach the singleton directly or through `asInterface`.
|
|
60
|
+
let asInterface: GraphQL_ServerInstance.t = {
|
|
61
|
+
registerMutations,
|
|
62
|
+
registerQueries,
|
|
63
|
+
registerSubscriptions,
|
|
64
|
+
registerTypes,
|
|
65
|
+
getMutationResolver,
|
|
66
|
+
getQueryResolver,
|
|
67
|
+
start,
|
|
68
|
+
stop,
|
|
69
|
+
reset,
|
|
70
|
+
buildSdl,
|
|
71
|
+
getFullSdl,
|
|
72
|
+
getSchema,
|
|
73
|
+
diagnostics,
|
|
74
|
+
printDiagnostics,
|
|
75
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
|
+
|
|
3
|
+
import * as Auth_GraphqlContext$ReventlessLocal from "./Auth/Auth_GraphqlContext.res.mjs";
|
|
4
|
+
import * as GraphQL_ServerInstance$ReventlessLocal from "./GraphQL_ServerInstance.res.mjs";
|
|
5
|
+
|
|
6
|
+
let instance = GraphQL_ServerInstance$ReventlessLocal.make("GraphQL:Platform");
|
|
7
|
+
|
|
8
|
+
function wrapAdmin(resolvers) {
|
|
9
|
+
let wrapped = {};
|
|
10
|
+
Object.entries(resolvers).forEach(param => {
|
|
11
|
+
wrapped[param[0]] = Auth_GraphqlContext$ReventlessLocal.requireGroup("Admin", param[1]);
|
|
12
|
+
});
|
|
13
|
+
return wrapped;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function registerMutations(sdlFields, resolvers) {
|
|
17
|
+
instance.registerMutations(sdlFields, wrapAdmin(resolvers));
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function registerQueries(sdlFields, resolvers) {
|
|
21
|
+
instance.registerQueries(sdlFields, wrapAdmin(resolvers));
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
let registerSubscriptions = instance.registerSubscriptions;
|
|
25
|
+
|
|
26
|
+
let registerTypes = instance.registerTypes;
|
|
27
|
+
|
|
28
|
+
let getMutationResolver = instance.getMutationResolver;
|
|
29
|
+
|
|
30
|
+
let getQueryResolver = instance.getQueryResolver;
|
|
31
|
+
|
|
32
|
+
let start = instance.start;
|
|
33
|
+
|
|
34
|
+
let stop = instance.stop;
|
|
35
|
+
|
|
36
|
+
let reset = instance.reset;
|
|
37
|
+
|
|
38
|
+
let buildSdl = instance.buildSdl;
|
|
39
|
+
|
|
40
|
+
let getFullSdl = instance.getFullSdl;
|
|
41
|
+
|
|
42
|
+
let getSchema = instance.getSchema;
|
|
43
|
+
|
|
44
|
+
let diagnostics = instance.diagnostics;
|
|
45
|
+
|
|
46
|
+
let printDiagnostics = instance.printDiagnostics;
|
|
47
|
+
|
|
48
|
+
let asInterface = {
|
|
49
|
+
registerMutations: registerMutations,
|
|
50
|
+
registerQueries: registerQueries,
|
|
51
|
+
registerSubscriptions: registerSubscriptions,
|
|
52
|
+
registerTypes: registerTypes,
|
|
53
|
+
getMutationResolver: getMutationResolver,
|
|
54
|
+
getQueryResolver: getQueryResolver,
|
|
55
|
+
start: start,
|
|
56
|
+
stop: stop,
|
|
57
|
+
reset: reset,
|
|
58
|
+
buildSdl: buildSdl,
|
|
59
|
+
getFullSdl: getFullSdl,
|
|
60
|
+
getSchema: getSchema,
|
|
61
|
+
diagnostics: diagnostics,
|
|
62
|
+
printDiagnostics: printDiagnostics
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
export {
|
|
66
|
+
instance,
|
|
67
|
+
wrapAdmin,
|
|
68
|
+
registerMutations,
|
|
69
|
+
registerQueries,
|
|
70
|
+
registerSubscriptions,
|
|
71
|
+
registerTypes,
|
|
72
|
+
getMutationResolver,
|
|
73
|
+
getQueryResolver,
|
|
74
|
+
start,
|
|
75
|
+
stop,
|
|
76
|
+
reset,
|
|
77
|
+
buildSdl,
|
|
78
|
+
getFullSdl,
|
|
79
|
+
getSchema,
|
|
80
|
+
diagnostics,
|
|
81
|
+
printDiagnostics,
|
|
82
|
+
asInterface,
|
|
83
|
+
}
|
|
84
|
+
/* instance Not a pure module */
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// Platform (admin-facing) in-memory MCP server — singleton.
|
|
2
|
+
// Serves admin/core operations on a separate port in split mode (port 3002).
|
|
3
|
+
//
|
|
4
|
+
// Uses the MCP_ServerInstance factory with a "MCP:Platform" label so log
|
|
5
|
+
// output is distinguishable from the domain MCP server.
|
|
6
|
+
|
|
7
|
+
let instance: MCP_ServerInstance.t = MCP_ServerInstance.make(~label="MCP:Platform")
|
|
8
|
+
|
|
9
|
+
// Re-export all instance functions for module-style access.
|
|
10
|
+
let registerTool = instance.registerTool
|
|
11
|
+
let registerResource = instance.registerResource
|
|
12
|
+
let registerResourceTemplate = instance.registerResourceTemplate
|
|
13
|
+
let registerToolsFromEntries = instance.registerToolsFromEntries
|
|
14
|
+
let registerResourcesFromEntries = instance.registerResourcesFromEntries
|
|
15
|
+
let registerEventHistoryResourcesFromEntries = instance.registerEventHistoryResourcesFromEntries
|
|
16
|
+
let start = instance.start
|
|
17
|
+
let stop = instance.stop
|
|
18
|
+
let reset = instance.reset
|
|
19
|
+
let diagnostics = instance.diagnostics
|
|
20
|
+
let printDiagnostics = instance.printDiagnostics
|
|
21
|
+
|
|
22
|
+
// Expose as MCP_ServerInstance.t for resolveTargetMCP() in Platform.res.
|
|
23
|
+
let asInterface: MCP_ServerInstance.t = instance
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
|
+
|
|
3
|
+
import * as MCP_ServerInstance$ReventlessLocal from "./MCP_ServerInstance.res.mjs";
|
|
4
|
+
|
|
5
|
+
let instance = MCP_ServerInstance$ReventlessLocal.make("MCP:Platform");
|
|
6
|
+
|
|
7
|
+
let registerTool = instance.registerTool;
|
|
8
|
+
|
|
9
|
+
let registerResource = instance.registerResource;
|
|
10
|
+
|
|
11
|
+
let registerResourceTemplate = instance.registerResourceTemplate;
|
|
12
|
+
|
|
13
|
+
let registerToolsFromEntries = instance.registerToolsFromEntries;
|
|
14
|
+
|
|
15
|
+
let registerResourcesFromEntries = instance.registerResourcesFromEntries;
|
|
16
|
+
|
|
17
|
+
let registerEventHistoryResourcesFromEntries = instance.registerEventHistoryResourcesFromEntries;
|
|
18
|
+
|
|
19
|
+
let start = instance.start;
|
|
20
|
+
|
|
21
|
+
let stop = instance.stop;
|
|
22
|
+
|
|
23
|
+
let reset = instance.reset;
|
|
24
|
+
|
|
25
|
+
let diagnostics = instance.diagnostics;
|
|
26
|
+
|
|
27
|
+
let printDiagnostics = instance.printDiagnostics;
|
|
28
|
+
|
|
29
|
+
let asInterface = instance;
|
|
30
|
+
|
|
31
|
+
export {
|
|
32
|
+
instance,
|
|
33
|
+
registerTool,
|
|
34
|
+
registerResource,
|
|
35
|
+
registerResourceTemplate,
|
|
36
|
+
registerToolsFromEntries,
|
|
37
|
+
registerResourcesFromEntries,
|
|
38
|
+
registerEventHistoryResourcesFromEntries,
|
|
39
|
+
start,
|
|
40
|
+
stop,
|
|
41
|
+
reset,
|
|
42
|
+
diagnostics,
|
|
43
|
+
printDiagnostics,
|
|
44
|
+
asInterface,
|
|
45
|
+
}
|
|
46
|
+
/* instance Not a pure module */
|