@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.
Files changed (334) hide show
  1. package/CHANGELOG.md +1197 -0
  2. package/LICENSE +202 -0
  3. package/__mocks__/emptyModule.js +2 -0
  4. package/__mocks__/nodeSqlite.mjs +6 -0
  5. package/package.json +67 -0
  6. package/rescript.json +39 -0
  7. package/src/Platform.res +2162 -0
  8. package/src/Platform.res.mjs +3389 -0
  9. package/src/adapter/Api/LocalGraphQL_Adapter.res +29 -0
  10. package/src/adapter/Api/LocalGraphQL_Adapter.res.mjs +26 -0
  11. package/src/adapter/Api/LocalGraphQL_SubscriptionResolvers.res +146 -0
  12. package/src/adapter/Api/LocalGraphQL_SubscriptionResolvers.res.mjs +88 -0
  13. package/src/adapter/Auth/Auth_GraphqlContext.res +83 -0
  14. package/src/adapter/Auth/Auth_GraphqlContext.res.mjs +76 -0
  15. package/src/adapter/Auth/LocalAuth.res +239 -0
  16. package/src/adapter/Auth/LocalAuth.res.mjs +247 -0
  17. package/src/adapter/Auth/UserStore.res +134 -0
  18. package/src/adapter/Auth/UserStore.res.mjs +146 -0
  19. package/src/adapter/Backend.res +46 -0
  20. package/src/adapter/Backend.res.mjs +66 -0
  21. package/src/adapter/BackendState.res +34 -0
  22. package/src/adapter/BackendState.res.mjs +42 -0
  23. package/src/adapter/Cloner/LocalClonerRunner.res +13 -0
  24. package/src/adapter/Cloner/LocalClonerRunner.res.mjs +12 -0
  25. package/src/adapter/CommandGenerator/CommandGeneratorResolvers_GraphQL.res +329 -0
  26. package/src/adapter/CommandGenerator/CommandGeneratorResolvers_GraphQL.res.mjs +301 -0
  27. package/src/adapter/CommandGenerator/InboundTranslationResolvers_GraphQL.res +76 -0
  28. package/src/adapter/CommandGenerator/InboundTranslationResolvers_GraphQL.res.mjs +57 -0
  29. package/src/adapter/CommandGenerator/LocalCommandGeneratorResolvers.res +19 -0
  30. package/src/adapter/CommandGenerator/LocalCommandGeneratorResolvers.res.mjs +19 -0
  31. package/src/adapter/CommandTopic/LocalCommandTopicChannel.res +104 -0
  32. package/src/adapter/CommandTopic/LocalCommandTopicChannel.res.mjs +82 -0
  33. package/src/adapter/CommandTopic/LocalCommandTopicRemoteChannel.res +32 -0
  34. package/src/adapter/CommandTopic/LocalCommandTopicRemoteChannel.res.mjs +38 -0
  35. package/src/adapter/Counter/LocalCounterHandler.res +42 -0
  36. package/src/adapter/Counter/LocalCounterHandler.res.mjs +45 -0
  37. package/src/adapter/DcbEventLog/DcbEventLogStorage_InMemory.res +131 -0
  38. package/src/adapter/DcbEventLog/DcbEventLogStorage_InMemory.res.mjs +140 -0
  39. package/src/adapter/DcbEventLog/DcbEventLogStorage_Sqlite.res +334 -0
  40. package/src/adapter/DcbEventLog/DcbEventLogStorage_Sqlite.res.mjs +299 -0
  41. package/src/adapter/DomainGraphQL_Server.res +565 -0
  42. package/src/adapter/DomainGraphQL_Server.res.mjs +576 -0
  43. package/src/adapter/DomainMCP_Server.res +369 -0
  44. package/src/adapter/DomainMCP_Server.res.mjs +358 -0
  45. package/src/adapter/EventCollector/LocalEventCollectorChannel.res +87 -0
  46. package/src/adapter/EventCollector/LocalEventCollectorChannel.res.mjs +45 -0
  47. package/src/adapter/EventLog/EventLogStorage_InMemory.res +105 -0
  48. package/src/adapter/EventLog/EventLogStorage_InMemory.res.mjs +117 -0
  49. package/src/adapter/EventLog/EventLogStorage_Sqlite.res +145 -0
  50. package/src/adapter/EventLog/EventLogStorage_Sqlite.res.mjs +155 -0
  51. package/src/adapter/EventTopic/LocalEventTopicPublisher.res +36 -0
  52. package/src/adapter/EventTopic/LocalEventTopicPublisher.res.mjs +31 -0
  53. package/src/adapter/GraphQL_Server.res +6 -0
  54. package/src/adapter/GraphQL_Server.res.mjs +154 -0
  55. package/src/adapter/GraphQL_ServerInstance.res +310 -0
  56. package/src/adapter/GraphQL_ServerInstance.res.mjs +257 -0
  57. package/src/adapter/Heartbeat/LocalHeartbeatRunner.res +57 -0
  58. package/src/adapter/Heartbeat/LocalHeartbeatRunner.res.mjs +34 -0
  59. package/src/adapter/LocalBus.res +498 -0
  60. package/src/adapter/LocalBus.res.mjs +1011 -0
  61. package/src/adapter/LocalPluginSpec.res +16 -0
  62. package/src/adapter/LocalPluginSpec.res.mjs +33 -0
  63. package/src/adapter/LocalSideEffectHandler.res +44 -0
  64. package/src/adapter/LocalSideEffectHandler.res.mjs +34 -0
  65. package/src/adapter/MCP_Server.res +4 -0
  66. package/src/adapter/MCP_Server.res.mjs +67 -0
  67. package/src/adapter/MCP_ServerInstance.res +362 -0
  68. package/src/adapter/MCP_ServerInstance.res.mjs +313 -0
  69. package/src/adapter/PlatformGraphQL_Server.res +75 -0
  70. package/src/adapter/PlatformGraphQL_Server.res.mjs +84 -0
  71. package/src/adapter/PlatformMCP_Server.res +23 -0
  72. package/src/adapter/PlatformMCP_Server.res.mjs +46 -0
  73. package/src/adapter/QueryDb/QueryDbResolvers_GraphQL.res +793 -0
  74. package/src/adapter/QueryDb/QueryDbResolvers_GraphQL.res.mjs +569 -0
  75. package/src/adapter/QueryDb/QueryDbStorage_InMemory.res +242 -0
  76. package/src/adapter/QueryDb/QueryDbStorage_InMemory.res.mjs +241 -0
  77. package/src/adapter/QueryDb/QueryDbStorage_Sqlite.res +339 -0
  78. package/src/adapter/QueryDb/QueryDbStorage_Sqlite.res.mjs +318 -0
  79. package/src/adapter/QueryDb/SortKey_Filter.res +48 -0
  80. package/src/adapter/QueryDb/SortKey_Filter.res.mjs +46 -0
  81. package/src/adapter/QueryEngine/LocalQueryEngine.res +57 -0
  82. package/src/adapter/QueryEngine/LocalQueryEngine.res.mjs +56 -0
  83. package/src/adapter/Runtime/LocalAggregateRuntime_Builder.res +91 -0
  84. package/src/adapter/Runtime/LocalAggregateRuntime_Builder.res.mjs +50 -0
  85. package/src/adapter/Runtime/LocalEventCollectorRuntime_Builder.res +47 -0
  86. package/src/adapter/Runtime/LocalEventCollectorRuntime_Builder.res.mjs +37 -0
  87. package/src/adapter/Runtime/LocalPluginRuntime_Builder.res +11 -0
  88. package/src/adapter/Runtime/LocalPluginRuntime_Builder.res.mjs +30 -0
  89. package/src/adapter/Runtime/LocalRuntimeEnvironment.res +54 -0
  90. package/src/adapter/Runtime/LocalRuntimeEnvironment.res.mjs +40 -0
  91. package/src/adapter/Scheduler/LocalScheduledPublisher.res +102 -0
  92. package/src/adapter/Scheduler/LocalScheduledPublisher.res.mjs +84 -0
  93. package/src/adapter/SqliteDriver.res +52 -0
  94. package/src/adapter/SqliteDriver.res.mjs +76 -0
  95. package/src/adapter/SqliteDriver.resi +31 -0
  96. package/src/adapter/Task/LocalTaskBucket.res +75 -0
  97. package/src/adapter/Task/LocalTaskBucket.res.mjs +48 -0
  98. package/src/adapter/Task/TaskBucket_Sqlite.res +47 -0
  99. package/src/adapter/Task/TaskBucket_Sqlite.res.mjs +40 -0
  100. package/src/components/Aggregate_Builder.res +55 -0
  101. package/src/components/Aggregate_Builder.res.mjs +140 -0
  102. package/src/components/AutomationSlice_Builder.res +41 -0
  103. package/src/components/AutomationSlice_Builder.res.mjs +57 -0
  104. package/src/components/Counter_Builder.res +14 -0
  105. package/src/components/Counter_Builder.res.mjs +32 -0
  106. package/src/components/DcbEventLog_Builder.res +18 -0
  107. package/src/components/DcbEventLog_Builder.res.mjs +24 -0
  108. package/src/components/ExtensionPoint_Builder.res +25 -0
  109. package/src/components/ExtensionPoint_Builder.res.mjs +44 -0
  110. package/src/components/InboundTranslationSlice_Builder.res +34 -0
  111. package/src/components/InboundTranslationSlice_Builder.res.mjs +45 -0
  112. package/src/components/OutboundTranslationSlice_Builder.res +43 -0
  113. package/src/components/OutboundTranslationSlice_Builder.res.mjs +59 -0
  114. package/src/components/Plugin_Builder.res +37 -0
  115. package/src/components/Plugin_Builder.res.mjs +67 -0
  116. package/src/components/ReadModel_Builder.res +47 -0
  117. package/src/components/ReadModel_Builder.res.mjs +54 -0
  118. package/src/components/StateChangeSlice_Builder.res +19 -0
  119. package/src/components/StateChangeSlice_Builder.res.mjs +21 -0
  120. package/src/components/StateViewSlice_Builder.res +42 -0
  121. package/src/components/StateViewSlice_Builder.res.mjs +58 -0
  122. package/src/components/Task_Builder.res +28 -0
  123. package/src/components/Task_Builder.res.mjs +41 -0
  124. package/src/reexport/CommandTopic.res +3 -0
  125. package/src/reexport/CommandTopic.res.mjs +55 -0
  126. package/src/test/Mocks/MockDcbEventLogStorage.res +136 -0
  127. package/src/test/Mocks/MockDcbEventLogStorage.res.mjs +146 -0
  128. package/src/test/Mocks/MockEventLogStorage.res +57 -0
  129. package/src/test/Mocks/MockEventLogStorage.res.mjs +65 -0
  130. package/src/test/Mocks/MockPublisher.res +29 -0
  131. package/src/test/Mocks/MockPublisher.res.mjs +28 -0
  132. package/src/test/Mocks/MockQueryDbStorage.res +104 -0
  133. package/src/test/Mocks/MockQueryDbStorage.res.mjs +136 -0
  134. package/src/test/TestRunner.res +96 -0
  135. package/src/test/TestRunner.res.mjs +71 -0
  136. package/tests/SplitApiFixtures.res +84 -0
  137. package/tests/SplitApiFixtures.res.mjs +88 -0
  138. package/tests/SplitApiTest.res +102 -0
  139. package/tests/SplitApiTest.res.mjs +82 -0
  140. package/tests/TestFixtures.res +54 -0
  141. package/tests/TestFixtures.res.mjs +65 -0
  142. package/tests/adapter/BackendParityTest.res +94 -0
  143. package/tests/adapter/BackendParityTest.res.mjs +96 -0
  144. package/tests/adapter/CollectNEventsTest.res +82 -0
  145. package/tests/adapter/CollectNEventsTest.res.mjs +83 -0
  146. package/tests/adapter/CommandAuthorizationTest.res +200 -0
  147. package/tests/adapter/CommandAuthorizationTest.res.mjs +190 -0
  148. package/tests/adapter/CommandTopicChannelTest.res +174 -0
  149. package/tests/adapter/CommandTopicChannelTest.res.mjs +170 -0
  150. package/tests/adapter/CounterHandlerTest.res +113 -0
  151. package/tests/adapter/CounterHandlerTest.res.mjs +96 -0
  152. package/tests/adapter/DcbEventLogStorageSqliteTest.res +157 -0
  153. package/tests/adapter/DcbEventLogStorageSqliteTest.res.mjs +165 -0
  154. package/tests/adapter/DcbEventLogStorageTest.res +187 -0
  155. package/tests/adapter/DcbEventLogStorageTest.res.mjs +195 -0
  156. package/tests/adapter/EventCollectorChannelTest.res +166 -0
  157. package/tests/adapter/EventCollectorChannelTest.res.mjs +178 -0
  158. package/tests/adapter/EventLogStorageSqliteTest.res +105 -0
  159. package/tests/adapter/EventLogStorageSqliteTest.res.mjs +116 -0
  160. package/tests/adapter/EventTapTest.res +102 -0
  161. package/tests/adapter/EventTapTest.res.mjs +94 -0
  162. package/tests/adapter/EventTopicPublisherTest.res +76 -0
  163. package/tests/adapter/EventTopicPublisherTest.res.mjs +86 -0
  164. package/tests/adapter/GraphQL_SchemaInspectorTest.res +763 -0
  165. package/tests/adapter/GraphQL_SchemaInspectorTest.res.mjs +578 -0
  166. package/tests/adapter/GraphQL_SubscriptionResolversTest.res +161 -0
  167. package/tests/adapter/GraphQL_SubscriptionResolversTest.res.mjs +134 -0
  168. package/tests/adapter/HeartbeatRunnerTest.res +136 -0
  169. package/tests/adapter/HeartbeatRunnerTest.res.mjs +96 -0
  170. package/tests/adapter/LocalAuthHttpTest.res +224 -0
  171. package/tests/adapter/LocalAuthHttpTest.res.mjs +237 -0
  172. package/tests/adapter/LocalAuthLoginTest.res +180 -0
  173. package/tests/adapter/LocalAuthLoginTest.res.mjs +207 -0
  174. package/tests/adapter/LocalAuthTest.res +106 -0
  175. package/tests/adapter/LocalAuthTest.res.mjs +145 -0
  176. package/tests/adapter/LocalAuthUserStoreTest.res +172 -0
  177. package/tests/adapter/LocalAuthUserStoreTest.res.mjs +208 -0
  178. package/tests/adapter/LocalBusBoundedTest.res +157 -0
  179. package/tests/adapter/LocalBusBoundedTest.res.mjs +168 -0
  180. package/tests/adapter/LocalBusPubSubTest.res +81 -0
  181. package/tests/adapter/LocalBusPubSubTest.res.mjs +81 -0
  182. package/tests/adapter/QueryDbGsiTtlTest.res +268 -0
  183. package/tests/adapter/QueryDbGsiTtlTest.res.mjs +209 -0
  184. package/tests/adapter/QueryDbListResolverTest.res +361 -0
  185. package/tests/adapter/QueryDbListResolverTest.res.mjs +426 -0
  186. package/tests/adapter/QueryDbStorageSqliteTest.res +159 -0
  187. package/tests/adapter/QueryDbStorageSqliteTest.res.mjs +126 -0
  188. package/tests/adapter/QueryDbStorageTest.res +171 -0
  189. package/tests/adapter/QueryDbStorageTest.res.mjs +170 -0
  190. package/tests/adapter/QueryEngineTest.res +152 -0
  191. package/tests/adapter/QueryEngineTest.res.mjs +148 -0
  192. package/tests/adapter/ScheduledPublisherTest.res +199 -0
  193. package/tests/adapter/ScheduledPublisherTest.res.mjs +203 -0
  194. package/tests/adapter/SortKey_FilterTest.res +103 -0
  195. package/tests/adapter/SortKey_FilterTest.res.mjs +135 -0
  196. package/tests/adapter/SqliteDriverTest.res +86 -0
  197. package/tests/adapter/SqliteDriverTest.res.mjs +101 -0
  198. package/tests/adapter/TaskBucketSqliteTest.res +44 -0
  199. package/tests/adapter/TaskBucketSqliteTest.res.mjs +40 -0
  200. package/tests/adapter/TaskBucketTest.res +106 -0
  201. package/tests/adapter/TaskBucketTest.res.mjs +118 -0
  202. package/tests/components/aggregate/AggregateFixtures.res +78 -0
  203. package/tests/components/aggregate/AggregateFixtures.res.mjs +109 -0
  204. package/tests/components/aggregate/AggregateTest.res +129 -0
  205. package/tests/components/aggregate/AggregateTest.res.mjs +129 -0
  206. package/tests/components/automationslice/AutomationSliceCallbackTest.res +212 -0
  207. package/tests/components/automationslice/AutomationSliceCallbackTest.res.mjs +233 -0
  208. package/tests/components/automationslice/AutomationSliceFixtures.res +189 -0
  209. package/tests/components/automationslice/AutomationSliceFixtures.res.mjs +276 -0
  210. package/tests/components/automationslice/AutomationSliceSelfDeadlockFixtures.res +289 -0
  211. package/tests/components/automationslice/AutomationSliceSelfDeadlockFixtures.res.mjs +453 -0
  212. package/tests/components/automationslice/AutomationSliceSelfDeadlockTest.res +47 -0
  213. package/tests/components/automationslice/AutomationSliceSelfDeadlockTest.res.mjs +31 -0
  214. package/tests/components/automationslice/MixedSourceAutomationSliceFixtures.res +213 -0
  215. package/tests/components/automationslice/MixedSourceAutomationSliceFixtures.res.mjs +268 -0
  216. package/tests/components/automationslice/MixedSourceAutomationSliceTest.res +118 -0
  217. package/tests/components/automationslice/MixedSourceAutomationSliceTest.res.mjs +99 -0
  218. package/tests/components/commandgenerator/CommandGeneratorFixtures.res +73 -0
  219. package/tests/components/commandgenerator/CommandGeneratorFixtures.res.mjs +109 -0
  220. package/tests/components/commandgenerator/CommandGeneratorTest.res +43 -0
  221. package/tests/components/commandgenerator/CommandGeneratorTest.res.mjs +46 -0
  222. package/tests/components/commandtopic/CommandTopicFixtures.res +37 -0
  223. package/tests/components/commandtopic/CommandTopicFixtures.res.mjs +68 -0
  224. package/tests/components/commandtopic/CommandTopicStreamFixtures.res +43 -0
  225. package/tests/components/commandtopic/CommandTopicStreamFixtures.res.mjs +91 -0
  226. package/tests/components/commandtopic/CommandTopicStreamTest.res +30 -0
  227. package/tests/components/commandtopic/CommandTopicStreamTest.res.mjs +35 -0
  228. package/tests/components/commandtopic/CommandTopicTest.res +55 -0
  229. package/tests/components/commandtopic/CommandTopicTest.res.mjs +62 -0
  230. package/tests/components/counter/CounterFixtures.res +42 -0
  231. package/tests/components/counter/CounterFixtures.res.mjs +34 -0
  232. package/tests/components/counter/CounterTest.res +46 -0
  233. package/tests/components/counter/CounterTest.res.mjs +61 -0
  234. package/tests/components/dcb/DcbCrossPartitionFixtures.res +170 -0
  235. package/tests/components/dcb/DcbCrossPartitionFixtures.res.mjs +276 -0
  236. package/tests/components/dcb/DcbCrossPartitionReadTest.res +68 -0
  237. package/tests/components/dcb/DcbCrossPartitionReadTest.res.mjs +78 -0
  238. package/tests/components/dcb/DcbEventLogAppendStreamTest.res +72 -0
  239. package/tests/components/dcb/DcbEventLogAppendStreamTest.res.mjs +82 -0
  240. package/tests/components/dcb/DcbEventLogStreamTest.res +103 -0
  241. package/tests/components/dcb/DcbEventLogStreamTest.res.mjs +91 -0
  242. package/tests/components/dcb/DcbFixtures.res +145 -0
  243. package/tests/components/dcb/DcbFixtures.res.mjs +221 -0
  244. package/tests/components/dcb/DcbTest.res +55 -0
  245. package/tests/components/dcb/DcbTest.res.mjs +55 -0
  246. package/tests/components/eventcollector/EventCollectorFixtures.res +42 -0
  247. package/tests/components/eventcollector/EventCollectorFixtures.res.mjs +49 -0
  248. package/tests/components/eventcollector/EventCollectorTest.res +37 -0
  249. package/tests/components/eventcollector/EventCollectorTest.res.mjs +36 -0
  250. package/tests/components/eventlog/EventLogAppendStreamTest.res +93 -0
  251. package/tests/components/eventlog/EventLogAppendStreamTest.res.mjs +113 -0
  252. package/tests/components/eventlog/EventLogConflictTest.res +86 -0
  253. package/tests/components/eventlog/EventLogConflictTest.res.mjs +81 -0
  254. package/tests/components/eventlog/EventLogFixtures.res +52 -0
  255. package/tests/components/eventlog/EventLogFixtures.res.mjs +80 -0
  256. package/tests/components/eventlog/EventLogStreamTest.res +98 -0
  257. package/tests/components/eventlog/EventLogStreamTest.res.mjs +142 -0
  258. package/tests/components/eventlog/EventLogTest.res +53 -0
  259. package/tests/components/eventlog/EventLogTest.res.mjs +74 -0
  260. package/tests/components/eventtopic/EventTopicFixtures.res +47 -0
  261. package/tests/components/eventtopic/EventTopicFixtures.res.mjs +77 -0
  262. package/tests/components/eventtopic/EventTopicStreamFixtures.res +27 -0
  263. package/tests/components/eventtopic/EventTopicStreamFixtures.res.mjs +62 -0
  264. package/tests/components/eventtopic/EventTopicStreamTest.res +35 -0
  265. package/tests/components/eventtopic/EventTopicStreamTest.res.mjs +44 -0
  266. package/tests/components/eventtopic/EventTopicTest.res +35 -0
  267. package/tests/components/eventtopic/EventTopicTest.res.mjs +43 -0
  268. package/tests/components/extensionpoint/ExtensionPointFixtures.res +145 -0
  269. package/tests/components/extensionpoint/ExtensionPointFixtures.res.mjs +188 -0
  270. package/tests/components/extensionpoint/ExtensionPointTest.res +62 -0
  271. package/tests/components/extensionpoint/ExtensionPointTest.res.mjs +55 -0
  272. package/tests/components/heartbeat/HeartbeatFixtures.res +48 -0
  273. package/tests/components/heartbeat/HeartbeatFixtures.res.mjs +46 -0
  274. package/tests/components/heartbeat/HeartbeatTest.res +67 -0
  275. package/tests/components/heartbeat/HeartbeatTest.res.mjs +65 -0
  276. package/tests/components/inboundtranslationslice/InboundTranslationSliceCallbackTest.res +241 -0
  277. package/tests/components/inboundtranslationslice/InboundTranslationSliceCallbackTest.res.mjs +239 -0
  278. package/tests/components/inboundtranslationslice/InboundTranslationSliceFixtures.res +36 -0
  279. package/tests/components/inboundtranslationslice/InboundTranslationSliceFixtures.res.mjs +73 -0
  280. package/tests/components/outboundtranslationslice/OutboundTranslationSliceCallbackTest.res +191 -0
  281. package/tests/components/outboundtranslationslice/OutboundTranslationSliceCallbackTest.res.mjs +297 -0
  282. package/tests/components/outboundtranslationslice/OutboundTranslationSliceFixtures.res +78 -0
  283. package/tests/components/outboundtranslationslice/OutboundTranslationSliceFixtures.res.mjs +137 -0
  284. package/tests/components/querydb/QueryDbFixtures.res +39 -0
  285. package/tests/components/querydb/QueryDbFixtures.res.mjs +73 -0
  286. package/tests/components/querydb/QueryDbSubIdFixtures.res +44 -0
  287. package/tests/components/querydb/QueryDbSubIdFixtures.res.mjs +80 -0
  288. package/tests/components/querydb/QueryDbSubIdTest.res +104 -0
  289. package/tests/components/querydb/QueryDbSubIdTest.res.mjs +104 -0
  290. package/tests/components/querydb/QueryDbTest.res +81 -0
  291. package/tests/components/querydb/QueryDbTest.res.mjs +126 -0
  292. package/tests/components/readmodel/DcbReadModelE2EFixtures.res +215 -0
  293. package/tests/components/readmodel/DcbReadModelE2EFixtures.res.mjs +308 -0
  294. package/tests/components/readmodel/DcbReadModelE2ETest.res +45 -0
  295. package/tests/components/readmodel/DcbReadModelE2ETest.res.mjs +37 -0
  296. package/tests/components/readmodel/DcbReadModelTypoFailFastTest.res +88 -0
  297. package/tests/components/readmodel/DcbReadModelTypoFailFastTest.res.mjs +152 -0
  298. package/tests/components/readmodel/MixedSourceReadModelFixtures.res +181 -0
  299. package/tests/components/readmodel/MixedSourceReadModelFixtures.res.mjs +277 -0
  300. package/tests/components/readmodel/MixedSourceReadModelTest.res +61 -0
  301. package/tests/components/readmodel/MixedSourceReadModelTest.res.mjs +68 -0
  302. package/tests/components/readmodel/ReadModelFixtures.res +138 -0
  303. package/tests/components/readmodel/ReadModelFixtures.res.mjs +169 -0
  304. package/tests/components/readmodel/ReadModelTest.res +46 -0
  305. package/tests/components/readmodel/ReadModelTest.res.mjs +36 -0
  306. package/tests/components/scheduler/SchedulerFixtures.res +59 -0
  307. package/tests/components/scheduler/SchedulerFixtures.res.mjs +63 -0
  308. package/tests/components/scheduler/SchedulerTest.res +76 -0
  309. package/tests/components/scheduler/SchedulerTest.res.mjs +86 -0
  310. package/tests/components/sideeffecthandler/SideEffectHandlerFixtures.res +133 -0
  311. package/tests/components/sideeffecthandler/SideEffectHandlerFixtures.res.mjs +149 -0
  312. package/tests/components/sideeffecthandler/SideEffectHandlerTest.res +39 -0
  313. package/tests/components/sideeffecthandler/SideEffectHandlerTest.res.mjs +28 -0
  314. package/tests/components/stateviewslice/StateViewSliceFixtures.res +117 -0
  315. package/tests/components/stateviewslice/StateViewSliceFixtures.res.mjs +188 -0
  316. package/tests/components/stateviewslice/StateViewSliceSubIdFixtures.res +117 -0
  317. package/tests/components/stateviewslice/StateViewSliceSubIdFixtures.res.mjs +183 -0
  318. package/tests/components/stateviewslice/StateViewSliceSubIdTest.res +78 -0
  319. package/tests/components/stateviewslice/StateViewSliceSubIdTest.res.mjs +107 -0
  320. package/tests/components/stateviewslice/StateViewSliceTest.res +59 -0
  321. package/tests/components/stateviewslice/StateViewSliceTest.res.mjs +72 -0
  322. package/tests/components/task/TaskFixtures.res +87 -0
  323. package/tests/components/task/TaskFixtures.res.mjs +82 -0
  324. package/tests/components/task/TaskTest.res +98 -0
  325. package/tests/components/task/TaskTest.res.mjs +46 -0
  326. package/tests/plugin/PluginBehavior_GWT.res +146 -0
  327. package/tests/plugin/PluginBehavior_GWT.res.mjs +281 -0
  328. package/tests/plugin/Plugin_Fixtures.res +61 -0
  329. package/tests/plugin/Plugin_Fixtures.res.mjs +105 -0
  330. package/tests/plugin/PluginsProjection_GWT.res +95 -0
  331. package/tests/plugin/PluginsProjection_GWT.res.mjs +120 -0
  332. package/tests/plugin/UIFragmentRegistryProjection_GWT.res +72 -0
  333. package/tests/plugin/UIFragmentRegistryProjection_GWT.res.mjs +117 -0
  334. package/tests/setup/sqliteGlobal.cjs +12 -0
@@ -0,0 +1,3389 @@
1
+ // Generated by ReScript, PLEASE EDIT WITH CARE
2
+
3
+ import * as S from "sury/src/S.res.mjs";
4
+ import * as Stream from "@reventlessdev/rescript-effect/src/Stream.res.mjs";
5
+ import * as Stdlib_Int from "@rescript/runtime/lib/es6/Stdlib_Int.js";
6
+ import * as Stdlib_Bool from "@rescript/runtime/lib/es6/Stdlib_Bool.js";
7
+ import * as Stdlib_Dict from "@rescript/runtime/lib/es6/Stdlib_Dict.js";
8
+ import * as Stdlib_JSON from "@rescript/runtime/lib/es6/Stdlib_JSON.js";
9
+ import * as Stdlib_Array from "@rescript/runtime/lib/es6/Stdlib_Array.js";
10
+ import * as Id$Reventless from "@reventlessdev/reventless-spec/src/types/Id.res.mjs";
11
+ import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
12
+ import * as Stdlib_String from "@rescript/runtime/lib/es6/Stdlib_String.js";
13
+ import * as Effect from "effect/Effect";
14
+ import * as Stream$1 from "effect/Stream";
15
+ import * as Pulumi from "@pulumi/pulumi";
16
+ import * as Plugin$Reventless from "@reventlessdev/reventless-spec/src/components/Plugin.res.mjs";
17
+ import * as Logger$ReventlessCore from "@reventlessdev/reventless-core/src/util/Logger.res.mjs";
18
+ import * as Plugin$ReventlessCore from "@reventlessdev/reventless-core/src/plugin/component/Plugin.res.mjs";
19
+ import * as Message$ReventlessCore from "@reventlessdev/reventless-core/src/Message.res.mjs";
20
+ import * as AdminApi$ReventlessCore from "@reventlessdev/reventless-core/src/admin/AdminApi.res.mjs";
21
+ import * as Backend$ReventlessLocal from "./adapter/Backend.res.mjs";
22
+ import * as Component$ReventlessCore from "@reventlessdev/reventless-core/src/components/Component.res.mjs";
23
+ import * as LocalBus$ReventlessLocal from "./adapter/LocalBus.res.mjs";
24
+ import * as Api_Naming$ReventlessCore from "@reventlessdev/reventless-core/src/components/Api/Api_Naming.res.mjs";
25
+ import * as PluginSpec$ReventlessCore from "@reventlessdev/reventless-core/src/plugin/lifecycle/PluginSpec.res.mjs";
26
+ import * as UserStore$ReventlessLocal from "./adapter/Auth/UserStore.res.mjs";
27
+ import * as Api_Builder$ReventlessCore from "@reventlessdev/reventless-core/src/components/Api/Api_Builder.res.mjs";
28
+ import * as TestRunner$ReventlessLocal from "./test/TestRunner.res.mjs";
29
+ import * as CommandTopic$ReventlessCore from "@reventlessdev/reventless-core/src/components/CommandTopic/CommandTopic.res.mjs";
30
+ import * as EffectLogger$ReventlessCore from "@reventlessdev/reventless-core/src/util/EffectLogger.res.mjs";
31
+ import * as BackendState$ReventlessLocal from "./adapter/BackendState.res.mjs";
32
+ import * as SqliteDriver$ReventlessLocal from "./adapter/SqliteDriver.res.mjs";
33
+ import * as Task_Builder$ReventlessLocal from "./components/Task_Builder.res.mjs";
34
+ import * as Platform_Admin$ReventlessCore from "@reventlessdev/reventless-core/src/admin/Platform_Admin.res.mjs";
35
+ import * as PluginBehavior$ReventlessCore from "@reventlessdev/reventless-core/src/plugin/lifecycle/PluginBehavior.res.mjs";
36
+ import * as Plugin_Helpers$ReventlessCore from "@reventlessdev/reventless-core/src/plugin/component/Plugin_Helpers.res.mjs";
37
+ import * as Plugin_Builder$ReventlessLocal from "./components/Plugin_Builder.res.mjs";
38
+ import * as Counter_Builder$ReventlessLocal from "./components/Counter_Builder.res.mjs";
39
+ import * as GraphQL_Stitcher$ReventlessCore from "@reventlessdev/reventless-core/src/components/Api/GraphQL_Stitcher.res.mjs";
40
+ import * as LocalPluginSpec$ReventlessLocal from "./adapter/LocalPluginSpec.res.mjs";
41
+ import * as NoEventMappings$ReventlessInfra from "@reventlessdev/reventless-infra/src/types/NoEventMappings.res.mjs";
42
+ import * as DomainMCP_Server$ReventlessLocal from "./adapter/DomainMCP_Server.res.mjs";
43
+ import * as ExtensionMapping$ReventlessInfra from "@reventlessdev/reventless-infra/src/types/ExtensionMapping.res.mjs";
44
+ import * as LocalQueryEngine$ReventlessLocal from "./adapter/QueryEngine/LocalQueryEngine.res.mjs";
45
+ import * as PluginsProjection$ReventlessCore from "@reventlessdev/reventless-core/src/plugin/lifecycle/PluginsProjection.res.mjs";
46
+ import * as Scheduler_Builder$ReventlessCore from "@reventlessdev/reventless-core/src/components/Scheduler/Scheduler_Builder.res.mjs";
47
+ import * as Aggregate_Builder$ReventlessLocal from "./components/Aggregate_Builder.res.mjs";
48
+ import * as LocalClonerRunner$ReventlessLocal from "./adapter/Cloner/LocalClonerRunner.res.mjs";
49
+ import * as PluginBaseFragment$ReventlessCore from "@reventlessdev/reventless-core/src/plugin/api/PluginBaseFragment.res.mjs";
50
+ import * as ReadModel_Builder$ReventlessLocal from "./components/ReadModel_Builder.res.mjs";
51
+ import * as PlatformMCP_Server$ReventlessLocal from "./adapter/PlatformMCP_Server.res.mjs";
52
+ import * as Auth_GraphqlContext$ReventlessLocal from "./adapter/Auth/Auth_GraphqlContext.res.mjs";
53
+ import * as PluginsReadModelSpec$ReventlessCore from "@reventlessdev/reventless-core/src/plugin/lifecycle/PluginsReadModelSpec.res.mjs";
54
+ import * as DomainGraphQL_Server$ReventlessLocal from "./adapter/DomainGraphQL_Server.res.mjs";
55
+ import * as LocalGraphQL_Adapter$ReventlessLocal from "./adapter/Api/LocalGraphQL_Adapter.res.mjs";
56
+ import * as ExtensionPointMapping$ReventlessInfra from "@reventlessdev/reventless-infra/src/types/ExtensionPointMapping.res.mjs";
57
+ import * as EventLogStorage_Sqlite$ReventlessLocal from "./adapter/EventLog/EventLogStorage_Sqlite.res.mjs";
58
+ import * as ExtensionPoint_Builder$ReventlessLocal from "./components/ExtensionPoint_Builder.res.mjs";
59
+ import * as PlatformGraphQL_Server$ReventlessLocal from "./adapter/PlatformGraphQL_Server.res.mjs";
60
+ import * as Platform_UIFragmentsApi$ReventlessCore from "@reventlessdev/reventless-core/src/admin/Platform_UIFragmentsApi.res.mjs";
61
+ import * as StateViewSlice_Builder$ReventlessLocal from "./components/StateViewSlice_Builder.res.mjs";
62
+ import * as AutomationSlice_Builder$ReventlessLocal from "./components/AutomationSlice_Builder.res.mjs";
63
+ import * as LocalRuntimeEnvironment$ReventlessLocal from "./adapter/Runtime/LocalRuntimeEnvironment.res.mjs";
64
+ import * as LocalScheduledPublisher$ReventlessLocal from "./adapter/Scheduler/LocalScheduledPublisher.res.mjs";
65
+ import * as Platform_Admin_Structure$ReventlessCore from "@reventlessdev/reventless-core/src/admin/Platform_Admin_Structure.res.mjs";
66
+ import * as LocalCommandTopicChannel$ReventlessLocal from "./adapter/CommandTopic/LocalCommandTopicChannel.res.mjs";
67
+ import * as LocalEventTopicPublisher$ReventlessLocal from "./adapter/EventTopic/LocalEventTopicPublisher.res.mjs";
68
+ import * as StateChangeSlice_Builder$ReventlessLocal from "./components/StateChangeSlice_Builder.res.mjs";
69
+ import * as DcbEventLogStorage_Sqlite$ReventlessLocal from "./adapter/DcbEventLog/DcbEventLogStorage_Sqlite.res.mjs";
70
+ import * as LocalEventCollectorChannel$ReventlessLocal from "./adapter/EventCollector/LocalEventCollectorChannel.res.mjs";
71
+ import * as PluginRuntime_Builder_Micro$ReventlessCore from "@reventlessdev/reventless-core/src/adapter/Runtime/PluginRuntime_Builder_Micro.res.mjs";
72
+ import * as DcbEventLogStorage_InMemory$ReventlessLocal from "./adapter/DcbEventLog/DcbEventLogStorage_InMemory.res.mjs";
73
+ import * as UIFragmentRegistryReadModelSpec$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UIFragmentRegistryReadModelSpec.res.mjs";
74
+ import * as InboundTranslationSlice_Builder$ReventlessLocal from "./components/InboundTranslationSlice_Builder.res.mjs";
75
+ import * as Platform_ComponentDefinitionsApi$ReventlessCore from "@reventlessdev/reventless-core/src/admin/Platform_ComponentDefinitionsApi.res.mjs";
76
+ import * as OutboundTranslationSlice_Builder$ReventlessLocal from "./components/OutboundTranslationSlice_Builder.res.mjs";
77
+ import * as CommandGeneratorResolvers_GraphQL$ReventlessLocal from "./adapter/CommandGenerator/CommandGeneratorResolvers_GraphQL.res.mjs";
78
+ import * as LocalGraphQL_SubscriptionResolvers$ReventlessLocal from "./adapter/Api/LocalGraphQL_SubscriptionResolvers.res.mjs";
79
+ import * as InboundTranslationResolvers_GraphQL$ReventlessLocal from "./adapter/CommandGenerator/InboundTranslationResolvers_GraphQL.res.mjs";
80
+
81
+ EffectLogger$ReventlessCore.setDefaultMinLevel("Debug");
82
+
83
+ let log = Logger$ReventlessCore.fromEnv();
84
+
85
+ let platformGraphQLRef = {
86
+ contents: undefined
87
+ };
88
+
89
+ function getPlatformGraphQL() {
90
+ return platformGraphQLRef.contents;
91
+ }
92
+
93
+ let platformMCPRef = {
94
+ contents: undefined
95
+ };
96
+
97
+ function MakeWithConfig(Config) {
98
+ TestRunner$ReventlessLocal.setup();
99
+ let match = Config.backend;
100
+ if (typeof match !== "object") {
101
+ BackendState$ReventlessLocal.setMemory();
102
+ } else {
103
+ let path = match.path;
104
+ if (match.resetOnStart) {
105
+ Backend$ReventlessLocal.removeFileIfExists(path);
106
+ }
107
+ let db = SqliteDriver$ReventlessLocal.openDb(path);
108
+ BackendState$ReventlessLocal.setSqlite(db, path);
109
+ LocalBus$ReventlessLocal.seedEventTapSeq(EventLogStorage_Sqlite$ReventlessLocal.countAll(db) + DcbEventLogStorage_Sqlite$ReventlessLocal.countAll(db) | 0);
110
+ }
111
+ let Bus = LocalBus$ReventlessLocal.Impl({
112
+ capacity: undefined,
113
+ silent: Config.silent
114
+ });
115
+ let currentDeployTarget = {
116
+ contents: "Domain"
117
+ };
118
+ let adminRegisteredServers = {
119
+ contents: []
120
+ };
121
+ let domainRelaySupport = {
122
+ encodeGlobalId: DomainGraphQL_Server$ReventlessLocal.encodeGlobalId,
123
+ registerNodeType: DomainGraphQL_Server$ReventlessLocal.registerNodeType,
124
+ registerNodeResolverCallback: DomainGraphQL_Server$ReventlessLocal.registerNodeResolverCallback,
125
+ nodeTypeRegistry: DomainGraphQL_Server$ReventlessLocal.nodeTypeRegistry
126
+ };
127
+ let resolveTargetGraphQL = () => {
128
+ if (!Config.splitApi) {
129
+ return DomainGraphQL_Server$ReventlessLocal.asInterface;
130
+ }
131
+ let match = currentDeployTarget.contents;
132
+ if (match === "Domain") {
133
+ return DomainGraphQL_Server$ReventlessLocal.asInterface;
134
+ } else {
135
+ return PlatformGraphQL_Server$ReventlessLocal.asInterface;
136
+ }
137
+ };
138
+ let resolveTargetMCP = () => {
139
+ if (!Config.splitApi) {
140
+ return DomainMCP_Server$ReventlessLocal.asInterface;
141
+ }
142
+ let match = currentDeployTarget.contents;
143
+ if (match === "Domain") {
144
+ return DomainMCP_Server$ReventlessLocal.asInterface;
145
+ } else {
146
+ return PlatformMCP_Server$ReventlessLocal.asInterface;
147
+ }
148
+ };
149
+ let hooks_mutationResolverHook = (kind, fields, commandSchema, commandAuthorization) => {
150
+ let server = resolveTargetGraphQL();
151
+ if (kind === "Aggregate") {
152
+ return CommandGeneratorResolvers_GraphQL$ReventlessLocal.register(fields, commandSchema, commandAuthorization, server);
153
+ }
154
+ fields.forEach(field => CommandGeneratorResolvers_GraphQL$ReventlessLocal.registerDcb(field, commandSchema, commandAuthorization, server));
155
+ };
156
+ let hooks_mutationBindHook = CommandGeneratorResolvers_GraphQL$ReventlessLocal.bindHandler;
157
+ let hooks_inboundMutationResolverHook = (fieldName, externalInputSchema) => InboundTranslationResolvers_GraphQL$ReventlessLocal.register(fieldName, externalInputSchema, resolveTargetGraphQL());
158
+ let hooks_inboundMutationBindReceiveHook = InboundTranslationResolvers_GraphQL$ReventlessLocal.bindReceive;
159
+ let hooks_schemaTypeRegistrationHook = sdlTypes => resolveTargetGraphQL().registerTypes(sdlTypes);
160
+ let hooks_mcpSchemaRegistrationHook = param => {
161
+ let subscriptionFields = param.subscriptionFields;
162
+ let eventLogEntries = param.eventLogEntries;
163
+ let pluginName = param.pluginName;
164
+ let mcp = resolveTargetMCP();
165
+ mcp.registerToolsFromEntries(pluginName, param.mutationEntries, async (toolName, args, identity) => {
166
+ let handlerRef = CommandGeneratorResolvers_GraphQL$ReventlessLocal.handlerRefs[toolName];
167
+ if (handlerRef === undefined) {
168
+ return `{"error":"no handler for ` + toolName + `"}`;
169
+ }
170
+ let generateCommand = handlerRef.contents;
171
+ if (generateCommand === undefined) {
172
+ return `{"error":"no handler for ` + toolName + `"}`;
173
+ }
174
+ let payload_meta = {
175
+ ip: [],
176
+ user: identity.userId,
177
+ info: `mcp/tools/` + toolName
178
+ };
179
+ let payload = {
180
+ command: toolName,
181
+ arguments: args,
182
+ meta: payload_meta,
183
+ identity: identity
184
+ };
185
+ let outcome = await Effect.runPromise(generateCommand(payload));
186
+ return JSON.stringify(CommandGeneratorResolvers_GraphQL$ReventlessLocal.commandOutcomeToJson(outcome));
187
+ });
188
+ mcp.registerResourcesFromEntries(pluginName, param.queryEntries, async (resourceName, uri) => {
189
+ let segments = uri.split("/");
190
+ let id = Stdlib_Option.getOr(segments.at(-1), "");
191
+ let queryDbName = Stdlib_Option.getOr(Stdlib_Option.map(Object.entries(Plugin_Helpers$ReventlessCore.queryFieldNamesRegistry).find(param => {
192
+ let entry = param[1];
193
+ if (entry.singleFieldName === resourceName) {
194
+ return true;
195
+ } else {
196
+ return entry.listFieldName === resourceName;
197
+ }
198
+ }), param => param[0]), resourceName);
199
+ let ops = Bus.getQueryDb(queryDbName);
200
+ if (ops === undefined) {
201
+ return null;
202
+ }
203
+ if (id.length > 0 && id !== resourceName) {
204
+ let items = await Effect.runPromise(Effect.catchAll(Stream.runCollect(ops.loadStream(id)), param => Effect.succeed([])));
205
+ let item = items[0];
206
+ if (item !== undefined) {
207
+ return item;
208
+ } else {
209
+ return null;
210
+ }
211
+ }
212
+ let scanAll = Bus.getQueryDbScan(queryDbName);
213
+ if (scanAll !== undefined) {
214
+ return scanAll();
215
+ } else {
216
+ return [];
217
+ }
218
+ });
219
+ mcp.registerEventHistoryResourcesFromEntries(pluginName, eventLogEntries, async (resourceName, uri) => {
220
+ let pathPart = uri.split("?")[0];
221
+ let segments = pathPart.split("/");
222
+ let entityId = Stdlib_Option.getOr(segments.at(-1), "");
223
+ let parts = uri.split("?");
224
+ let qs = parts[1];
225
+ let match;
226
+ if (qs !== undefined) {
227
+ let params = {};
228
+ qs.split("&").forEach(param => {
229
+ let kv = param.split("=");
230
+ let match = kv[0];
231
+ let match$1 = kv[1];
232
+ if (match !== undefined && match$1 !== undefined) {
233
+ params[match] = match$1;
234
+ return;
235
+ }
236
+ });
237
+ match = [
238
+ Stdlib_Option.flatMap(params["limit"], v => Stdlib_Int.fromString(v, undefined)),
239
+ params["after"]
240
+ ];
241
+ } else {
242
+ match = [
243
+ undefined,
244
+ undefined
245
+ ];
246
+ }
247
+ let after = match[1];
248
+ let limit = match[0];
249
+ let makePaginatedResponse = (events, hasMore, nextAfter) => Object.fromEntries([
250
+ [
251
+ "events",
252
+ events
253
+ ],
254
+ [
255
+ "pagination",
256
+ Object.fromEntries([
257
+ [
258
+ "hasMore",
259
+ hasMore
260
+ ],
261
+ [
262
+ "nextAfter",
263
+ Stdlib_Option.mapOr(nextAfter, null, prim => prim)
264
+ ]
265
+ ])
266
+ ]
267
+ ]);
268
+ let paginate = (events, getPosition) => {
269
+ let filtered;
270
+ if (after !== undefined) {
271
+ let idx = events.findIndex(e => Stdlib_Option.mapOr(getPosition(e), false, p => p > after));
272
+ filtered = idx >= 0 ? events.slice(idx, events.length) : [];
273
+ } else {
274
+ filtered = events;
275
+ }
276
+ let match = limit !== undefined && filtered.length > limit ? [
277
+ filtered.slice(0, limit),
278
+ true
279
+ ] : [
280
+ filtered,
281
+ false
282
+ ];
283
+ let hasMore = match[1];
284
+ let limited = match[0];
285
+ let nextAfterVal = hasMore ? Stdlib_Option.flatMap(limited.at(-1), getPosition) : undefined;
286
+ return makePaginatedResponse(limited, hasMore, nextAfterVal);
287
+ };
288
+ let matchingEntry = eventLogEntries.find(entry => resourceName.includes(entry.displayName.toLowerCase()));
289
+ if (matchingEntry === undefined) {
290
+ return makePaginatedResponse([], false, undefined);
291
+ }
292
+ let replay = Bus.getEventLogReplay(matchingEntry.busKey);
293
+ if (replay !== undefined) {
294
+ let events = await replay(entityId);
295
+ return paginate(events, e => {
296
+ let obj = Stdlib_JSON.Decode.object(e);
297
+ if (obj !== undefined) {
298
+ return Stdlib_Option.flatMap(obj["position"], Stdlib_JSON.Decode.string);
299
+ }
300
+ });
301
+ }
302
+ let read = Bus.getDcbEventLogRead(matchingEntry.busKey);
303
+ if (read === undefined) {
304
+ return makePaginatedResponse([], false, undefined);
305
+ }
306
+ let result = await read([], undefined);
307
+ let filtered = entityId.length > 0 && entityId !== resourceName ? result.events.filter(e => e.tags.some(tag => tag.value === entityId)) : result.events;
308
+ let serialized = filtered.map(e => Object.fromEntries([
309
+ [
310
+ "position",
311
+ e.position
312
+ ],
313
+ [
314
+ "event",
315
+ e.eventType
316
+ ],
317
+ [
318
+ "data",
319
+ e.data
320
+ ],
321
+ [
322
+ "tags",
323
+ e.tags.map(t => Object.fromEntries([
324
+ [
325
+ "key",
326
+ t.key
327
+ ],
328
+ [
329
+ "value",
330
+ t.value
331
+ ]
332
+ ]))
333
+ ]
334
+ ]));
335
+ return paginate(serialized, e => {
336
+ let obj = Stdlib_JSON.Decode.object(e);
337
+ if (obj !== undefined) {
338
+ return Stdlib_Option.flatMap(obj["position"], Stdlib_JSON.Decode.string);
339
+ }
340
+ });
341
+ });
342
+ if (subscriptionFields.length === 0) {
343
+ return;
344
+ }
345
+ let server = resolveTargetGraphQL();
346
+ eventLogEntries.forEach(entry => LocalGraphQL_SubscriptionResolvers$ReventlessLocal.bridgeSourceA(Bus.subscribeToEvents, entry.displayName, entry.busKey));
347
+ let sourceAEntries = eventLogEntries.map(e => {
348
+ let topic = LocalGraphQL_SubscriptionResolvers$ReventlessLocal.sourceATopic(e.displayName);
349
+ return {
350
+ fieldName: topic,
351
+ topic: topic
352
+ };
353
+ });
354
+ LocalGraphQL_SubscriptionResolvers$ReventlessLocal.registerAll(server, subscriptionFields, sourceAEntries, []);
355
+ };
356
+ let hooks_adminExtensionPoints = {
357
+ contents: Pulumi.output({})
358
+ };
359
+ let hooks_scheduler = {
360
+ contents: undefined
361
+ };
362
+ let hooks_schedulerRoleUrn = {
363
+ contents: Pulumi.output("")
364
+ };
365
+ let hooks_api = {
366
+ contents: undefined
367
+ };
368
+ let hooks_apiRole = {
369
+ contents: undefined
370
+ };
371
+ let hooks_deployTarget = {
372
+ contents: "Domain"
373
+ };
374
+ let hooks = {
375
+ mutationResolverHook: hooks_mutationResolverHook,
376
+ mutationBindHook: hooks_mutationBindHook,
377
+ inboundMutationResolverHook: hooks_inboundMutationResolverHook,
378
+ inboundMutationBindReceiveHook: hooks_inboundMutationBindReceiveHook,
379
+ schemaTypeRegistrationHook: hooks_schemaTypeRegistrationHook,
380
+ mcpSchemaRegistrationHook: hooks_mcpSchemaRegistrationHook,
381
+ adminExtensionPoints: hooks_adminExtensionPoints,
382
+ scheduler: hooks_scheduler,
383
+ schedulerRoleUrn: hooks_schedulerRoleUrn,
384
+ api: hooks_api,
385
+ apiRole: hooks_apiRole,
386
+ deployTarget: hooks_deployTarget
387
+ };
388
+ let AggregateMaker = Aggregate_Builder$ReventlessLocal.MakeWithHooks(Bus)({
389
+ hooks: hooks
390
+ });
391
+ let ReadModelMaker = ReadModel_Builder$ReventlessLocal.Make(Bus);
392
+ let ExtensionPointMaker = ExtensionPoint_Builder$ReventlessLocal.Make(Bus);
393
+ let TaskMaker = Task_Builder$ReventlessLocal.Make(Bus);
394
+ let StateViewSliceMaker = StateViewSlice_Builder$ReventlessLocal.Make(Bus);
395
+ let AutomationSliceMaker = AutomationSlice_Builder$ReventlessLocal.Make(Bus);
396
+ let OutboundTranslationSliceMaker = OutboundTranslationSlice_Builder$ReventlessLocal.Make(Bus);
397
+ let InboundTranslationSliceMaker = InboundTranslationSlice_Builder$ReventlessLocal.Make(Bus);
398
+ let Make = Spec => (Behavior => (EventMappings => {
399
+ let $$let = AggregateMaker.Make(Spec)(Behavior)(EventMappings);
400
+ return {
401
+ Spec: $$let.Spec,
402
+ make: $$let.make,
403
+ outputs: $$let.outputs,
404
+ operations: $$let.operations,
405
+ finish: $$let.finish
406
+ };
407
+ }));
408
+ let MakeAsync = Spec => (Behavior => (EventMappings => {
409
+ let $$let = AggregateMaker.Make(Spec)(Behavior)(EventMappings);
410
+ return {
411
+ Spec: $$let.Spec,
412
+ make: $$let.make,
413
+ outputs: $$let.outputs,
414
+ operations: $$let.operations,
415
+ finish: $$let.finish
416
+ };
417
+ }));
418
+ let Aggregate = {
419
+ Make: Make,
420
+ MakeAsync: MakeAsync
421
+ };
422
+ let Make$1 = Spec => (Mappings => {
423
+ let $$let = ReadModelMaker.Make(Spec)(Mappings);
424
+ return {
425
+ Spec: $$let.Spec,
426
+ sourceNames: $$let.sourceNames,
427
+ make: $$let.make,
428
+ outputs: $$let.outputs,
429
+ operations: $$let.operations,
430
+ finish: $$let.finish
431
+ };
432
+ });
433
+ let ReadModel = {
434
+ Make: Make$1
435
+ };
436
+ let Make$2 = Spec => (Mappings => {
437
+ let $$let = ReadModelMaker.Make(Spec)(Mappings);
438
+ return {
439
+ Spec: $$let.Spec,
440
+ sourceNames: $$let.sourceNames,
441
+ make: $$let.make,
442
+ outputs: $$let.outputs,
443
+ operations: $$let.operations,
444
+ finish: $$let.finish
445
+ };
446
+ });
447
+ let ReadModelStream = {
448
+ Make: Make$2
449
+ };
450
+ let Make$3 = Mapping => {
451
+ let CompiledMapping = ExtensionPointMapping$ReventlessInfra.Make(Mapping);
452
+ let name = Mapping.Delegate.name;
453
+ let mappings = [CompiledMapping];
454
+ return ExtensionPointMaker.Make(Mapping.ExtensionPoint)({
455
+ name: name,
456
+ moduleUrl: Mapping.moduleUrl,
457
+ mappings: mappings
458
+ });
459
+ };
460
+ let Make2 = Mapping1 => (Mapping2 => {
461
+ let CM1 = ExtensionPointMapping$ReventlessInfra.Make(Mapping1);
462
+ let CM2 = ExtensionPointMapping$ReventlessInfra.Make(Mapping2);
463
+ let name = Mapping1.Delegate.name + "+" + Mapping2.Delegate.name;
464
+ let mappings = [
465
+ CM1,
466
+ CM2
467
+ ];
468
+ return ExtensionPointMaker.Make(Mapping1.ExtensionPoint)({
469
+ name: name,
470
+ moduleUrl: Mapping1.moduleUrl,
471
+ mappings: mappings
472
+ });
473
+ });
474
+ let Make3 = Mapping1 => (Mapping2 => (Mapping3 => {
475
+ let CM1 = ExtensionPointMapping$ReventlessInfra.Make(Mapping1);
476
+ let CM2 = ExtensionPointMapping$ReventlessInfra.Make(Mapping2);
477
+ let CM3 = ExtensionPointMapping$ReventlessInfra.Make(Mapping3);
478
+ let name = Mapping1.Delegate.name + "+" + Mapping2.Delegate.name + "+" + Mapping3.Delegate.name;
479
+ let mappings = [
480
+ CM1,
481
+ CM2,
482
+ CM3
483
+ ];
484
+ return ExtensionPointMaker.Make(Mapping1.ExtensionPoint)({
485
+ name: name,
486
+ moduleUrl: Mapping1.moduleUrl,
487
+ mappings: mappings
488
+ });
489
+ }));
490
+ let MakeMulti = Spec => (Mappings => ExtensionPointMaker.Make(Spec)(Mappings));
491
+ let ExtensionPoint = {
492
+ Make: Make$3,
493
+ Make2: Make2,
494
+ Make3: Make3,
495
+ MakeMulti: MakeMulti
496
+ };
497
+ let Make$4 = Mapping => {
498
+ let CompiledMapping = ExtensionMapping$ReventlessInfra.Make(Mapping);
499
+ let name = Mapping.Delegate.name;
500
+ let mappings = [CompiledMapping];
501
+ return {
502
+ Spec: Mapping.ExtensionPoint,
503
+ name: name,
504
+ moduleUrl: Mapping.moduleUrl,
505
+ delegateModuleUrl: Mapping.delegateModuleUrl,
506
+ mappings: mappings
507
+ };
508
+ };
509
+ let Extension = {
510
+ Make: Make$4
511
+ };
512
+ let Make$5 = Spec => TaskMaker.Make(Spec);
513
+ let Task = {
514
+ Make: Make$5
515
+ };
516
+ let Counter = Counter_Builder$ReventlessLocal.Make(Bus);
517
+ let Make$6 = Spec => (Behavior => {
518
+ let $$let = StateChangeSlice_Builder$ReventlessLocal.Make(Spec)(Behavior);
519
+ return {
520
+ Spec: $$let.Spec,
521
+ Behavior: $$let.Behavior,
522
+ isAsync: $$let.isAsync,
523
+ make: $$let.make
524
+ };
525
+ });
526
+ let MakeAsync$1 = Spec => (Behavior => {
527
+ let include = StateChangeSlice_Builder$ReventlessLocal.Make(Spec)(Behavior);
528
+ return {
529
+ Spec: include.Spec,
530
+ Behavior: include.Behavior,
531
+ isAsync: true,
532
+ make: include.make
533
+ };
534
+ });
535
+ let StateChangeSlice = {
536
+ Make: Make$6,
537
+ MakeAsync: MakeAsync$1
538
+ };
539
+ let Make$7 = Spec => (Projection => {
540
+ let $$let = StateViewSliceMaker.Make(Spec)(Projection);
541
+ return {
542
+ Spec: $$let.Spec,
543
+ Projection: $$let.Projection,
544
+ make: $$let.make
545
+ };
546
+ });
547
+ let StateViewSlice = {
548
+ Make: Make$7
549
+ };
550
+ let Make$8 = Spec => (Projection => {
551
+ let $$let = StateViewSliceMaker.Make(Spec)(Projection);
552
+ return {
553
+ Spec: $$let.Spec,
554
+ Projection: $$let.Projection,
555
+ make: $$let.make
556
+ };
557
+ });
558
+ let StateViewSliceStream = {
559
+ Make: Make$8
560
+ };
561
+ let Make$9 = Spec => (Automation => AutomationSliceMaker.Make(Spec)(Automation));
562
+ let AutomationSlice = {
563
+ Make: Make$9
564
+ };
565
+ let Make$10 = Spec => (Translation => {
566
+ let $$let = OutboundTranslationSliceMaker.Make(Spec)(Translation);
567
+ return {
568
+ Spec: $$let.Spec,
569
+ Translation: $$let.Translation,
570
+ queryDbName: $$let.queryDbName,
571
+ make: $$let.make
572
+ };
573
+ });
574
+ let OutboundTranslationSlice = {
575
+ Make: Make$10
576
+ };
577
+ let Make$11 = Spec => (Translation => {
578
+ let $$let = InboundTranslationSliceMaker.Make(Spec)(Translation);
579
+ return {
580
+ Spec: $$let.Spec,
581
+ Translation: $$let.Translation,
582
+ queryDbName: $$let.queryDbName,
583
+ make: $$let.make
584
+ };
585
+ });
586
+ let InboundTranslationSlice = {
587
+ Make: Make$11
588
+ };
589
+ let emptyBaseFragment = GraphQL_Stitcher$ReventlessCore.encode({
590
+ types: [],
591
+ mutations: [],
592
+ queries: [],
593
+ subscriptions: []
594
+ });
595
+ let Make$12 = FragmentConfig => {
596
+ let Builder = Api_Builder$ReventlessCore.Make(LocalGraphQL_Adapter$ReventlessLocal);
597
+ let effectiveBaseFragment = Config.splitApi ? emptyBaseFragment : FragmentConfig.baseFragment;
598
+ let make = (name, opts) => Builder.make(name, effectiveBaseFragment, opts);
599
+ return {
600
+ make: make
601
+ };
602
+ };
603
+ let Api = {
604
+ Make: Make$12
605
+ };
606
+ let PluginMaker = Plugin_Builder$ReventlessLocal.Make(Bus)({
607
+ hooks: hooks
608
+ });
609
+ let Plugin_make = PluginMaker.make;
610
+ let Plugin_makeAutoUIManifest = PluginMaker.makeAutoUIManifest;
611
+ let Plugin_makePluginDefinition = PluginMaker.makePluginDefinition;
612
+ let Plugin = {
613
+ make: Plugin_make,
614
+ makeAutoUIManifest: Plugin_makeAutoUIManifest,
615
+ makePluginDefinition: Plugin_makePluginDefinition
616
+ };
617
+ let EventCollectorChannel = LocalEventCollectorChannel$ReventlessLocal.Make(Bus);
618
+ let QE = LocalQueryEngine$ReventlessLocal.Make(Bus);
619
+ let $$let = AggregateMaker.Make({
620
+ Id: Id$Reventless.$$String,
621
+ name: PluginSpec$ReventlessCore.name,
622
+ eventSchema: PluginSpec$ReventlessCore.eventSchema,
623
+ errorSchema: PluginSpec$ReventlessCore.errorSchema,
624
+ commandSchema: PluginSpec$ReventlessCore.commandSchema,
625
+ moduleUrl: PluginSpec$ReventlessCore.moduleUrl,
626
+ commandAuthorization: PluginSpec$ReventlessCore.commandAuthorization
627
+ })({
628
+ initialState: PluginBehavior$ReventlessCore.initialState,
629
+ evolve: PluginBehavior$ReventlessCore.evolve,
630
+ decide: PluginBehavior$ReventlessCore.decide,
631
+ moduleUrl: PluginBehavior$ReventlessCore.moduleUrl
632
+ })(NoEventMappings$ReventlessInfra.Make({
633
+ name: PluginSpec$ReventlessCore.name,
634
+ Id: Id$Reventless.$$String,
635
+ commandSchema: PluginSpec$ReventlessCore.commandSchema
636
+ }));
637
+ let LocalPluginAggregate_Spec = $$let.Spec;
638
+ let LocalPluginAggregate_make = $$let.make;
639
+ let LocalPluginAggregate_outputs = $$let.outputs;
640
+ let LocalPluginAggregate_operations = $$let.operations;
641
+ let LocalPluginAggregate_finish = $$let.finish;
642
+ let LocalPluginAggregate = {
643
+ Spec: LocalPluginAggregate_Spec,
644
+ make: LocalPluginAggregate_make,
645
+ outputs: LocalPluginAggregate_outputs,
646
+ operations: LocalPluginAggregate_operations,
647
+ finish: LocalPluginAggregate_finish
648
+ };
649
+ let PluginsReadModelMappings = {
650
+ moduleUrl: PluginsProjection$ReventlessCore.moduleUrl,
651
+ mappings: PluginsProjection$ReventlessCore.mappings
652
+ };
653
+ let PluginsReadModel = ReadModelMaker.MakeNoResolver({
654
+ Id: Id$Reventless.$$String,
655
+ name: PluginsReadModelSpec$ReventlessCore.name,
656
+ moduleUrl: PluginsReadModelSpec$ReventlessCore.moduleUrl,
657
+ stateSchema: PluginsReadModelSpec$ReventlessCore.stateSchema,
658
+ config: PluginsReadModelSpec$ReventlessCore.config,
659
+ subIdConfig: undefined,
660
+ authorization: PluginsReadModelSpec$ReventlessCore.authorization,
661
+ visibility: PluginsReadModelSpec$ReventlessCore.visibility
662
+ })(PluginsReadModelMappings);
663
+ let $$let$1 = LocalCommandTopicChannel$ReventlessLocal.Make(Bus);
664
+ let $$let$2 = LocalCommandTopicChannel$ReventlessLocal.Make(Bus);
665
+ let Admin = Platform_Admin$ReventlessCore.Make({
666
+ make: LocalRuntimeEnvironment$ReventlessLocal.make,
667
+ groupBySource: LocalRuntimeEnvironment$ReventlessLocal.groupBySource,
668
+ extractCorrelationId: LocalRuntimeEnvironment$ReventlessLocal.extractCorrelationId,
669
+ asEventHandler: prim => prim,
670
+ asEffectHandler: prim => prim
671
+ })(EventCollectorChannel)({
672
+ make: QE.make
673
+ })(LocalClonerRunner$ReventlessLocal)(PluginRuntime_Builder_Micro$ReventlessCore.Make({
674
+ make: LocalRuntimeEnvironment$ReventlessLocal.make,
675
+ groupBySource: LocalRuntimeEnvironment$ReventlessLocal.groupBySource,
676
+ extractCorrelationId: LocalRuntimeEnvironment$ReventlessLocal.extractCorrelationId,
677
+ asEventHandler: prim => prim,
678
+ asEffectHandler: prim => prim
679
+ })(EventCollectorChannel))(DcbEventLogStorage_InMemory$ReventlessLocal.Make(Bus))(LocalEventTopicPublisher$ReventlessLocal.Make(Bus))({
680
+ make: $$let$1.make
681
+ })({
682
+ make: $$let$2.make
683
+ })({
684
+ silent: Config.silent,
685
+ splitApi: Config.splitApi,
686
+ cloner: Config.cloner,
687
+ hooks: hooks
688
+ });
689
+ let makeScheduler = () => {
690
+ let SP = LocalScheduledPublisher$ReventlessLocal.Make(Bus);
691
+ let S = Scheduler_Builder$ReventlessCore.Make({
692
+ make: SP.make
693
+ });
694
+ return Component$ReventlessCore.operations(S.make(undefined));
695
+ };
696
+ let graphqlDebug = Stdlib_Option.isSome(process.env["GRAPHQL_DEBUG"]);
697
+ let resolvePort = (key, fallback) => Stdlib_Option.getOr(Stdlib_Option.flatMap(process.env[key], v => Stdlib_Int.fromString(v, undefined)), fallback);
698
+ let domainPort = resolvePort("REVENTLESS_DOMAIN_PORT", 4000);
699
+ let domainMcpPort = resolvePort("REVENTLESS_DOMAIN_MCP_PORT", 3001);
700
+ let platformPort = resolvePort("REVENTLESS_PLATFORM_PORT", 4001);
701
+ let platformMcpPort = resolvePort("REVENTLESS_PLATFORM_MCP_PORT", 3002);
702
+ let uiFragmentQueryDbOpsRef = {
703
+ contents: undefined
704
+ };
705
+ let ensureUIFragmentRegistryQueryDbStore = () => {
706
+ let ops = uiFragmentQueryDbOpsRef.contents;
707
+ if (ops !== undefined) {
708
+ return ops;
709
+ }
710
+ let store = {
711
+ contents: {}
712
+ };
713
+ let allItems = {
714
+ contents: []
715
+ };
716
+ let syncAll = () => {
717
+ allItems.contents = Object.entries(store.contents).flatMap(param => {
718
+ let id = param[0];
719
+ return param[1].map(item => {
720
+ let obj = Stdlib_Option.getOr(Stdlib_JSON.Decode.object(item), {});
721
+ if (Stdlib_Option.isSome(obj["id"])) {
722
+ return item;
723
+ }
724
+ let copy = {};
725
+ Object.entries(obj).forEach(param => {
726
+ copy[param[0]] = param[1];
727
+ });
728
+ copy["id"] = id;
729
+ return copy;
730
+ });
731
+ });
732
+ };
733
+ let ops_load = async id => ({
734
+ TAG: "Ok",
735
+ _0: Stdlib_Option.getOr(store.contents[id], [])
736
+ });
737
+ let ops_loadStream = id => Stream$1.fromIterable(Stdlib_Option.getOr(store.contents[id], []));
738
+ let ops_save = async (id, state, param, param$1) => {
739
+ store.contents[id] = [state];
740
+ syncAll();
741
+ return {
742
+ TAG: "Ok",
743
+ _0: undefined
744
+ };
745
+ };
746
+ let ops_saveBatch = async batch => {
747
+ batch.forEach(param => {
748
+ store.contents[param[0]] = [param[1]];
749
+ });
750
+ syncAll();
751
+ return {
752
+ TAG: "Ok",
753
+ _0: undefined
754
+ };
755
+ };
756
+ let ops_count = async (param, param$1, inc) => ({
757
+ TAG: "Ok",
758
+ _0: inc
759
+ });
760
+ let ops_delete = async (id, param) => {
761
+ Stdlib_Dict.$$delete(store.contents, id);
762
+ syncAll();
763
+ return {
764
+ TAG: "Ok",
765
+ _0: undefined
766
+ };
767
+ };
768
+ let ops_deleteBatch = async ids => {
769
+ ids.forEach(param => Stdlib_Dict.$$delete(store.contents, param[0]));
770
+ syncAll();
771
+ return {
772
+ TAG: "Ok",
773
+ _0: undefined
774
+ };
775
+ };
776
+ let ops$1 = {
777
+ load: ops_load,
778
+ loadStream: ops_loadStream,
779
+ save: ops_save,
780
+ saveBatch: ops_saveBatch,
781
+ count: ops_count,
782
+ delete: ops_delete,
783
+ deleteBatch: ops_deleteBatch
784
+ };
785
+ Bus.registerQueryDb(UIFragmentRegistryReadModelSpec$ReventlessCore.name, ops$1);
786
+ Bus.registerQueryDbScan(UIFragmentRegistryReadModelSpec$ReventlessCore.name, () => allItems.contents);
787
+ Bus.registerQueryDbStream(UIFragmentRegistryReadModelSpec$ReventlessCore.name, () => Stream$1.fromIterable(allItems.contents));
788
+ uiFragmentQueryDbOpsRef.contents = ops$1;
789
+ return ops$1;
790
+ };
791
+ let pluginStructuresStore = {
792
+ contents: {}
793
+ };
794
+ let seedPluginStructuresStore = pluginComponents => {
795
+ pluginComponents.forEach(plugin => {
796
+ let outputs = Component$ReventlessCore.outputs(plugin);
797
+ Pulumi.all([
798
+ outputs.id,
799
+ outputs.pluginStructure
800
+ ]).apply(param => {
801
+ let ps = param[1];
802
+ if (ps !== undefined) {
803
+ pluginStructuresStore.contents[param[0]] = ps;
804
+ return;
805
+ }
806
+ });
807
+ });
808
+ };
809
+ let pluginCmdTopicKey = PluginSpec$ReventlessCore.name + "AggrCmdTopic";
810
+ let pluginEventTopicKey = PluginSpec$ReventlessCore.name + "AggrEventTopic";
811
+ let dispatchPluginCommand = (pluginName, command) => {
812
+ let cmdJson_meta = Message$ReventlessCore.generateMeta(PluginSpec$ReventlessCore.name, undefined, undefined, undefined, undefined, undefined, undefined, undefined);
813
+ let cmdJson_commandJson = S.reverseConvertToJsonOrThrow(command, PluginSpec$ReventlessCore.commandSchema);
814
+ let cmdJson = {
815
+ id: pluginName,
816
+ meta: cmdJson_meta,
817
+ commandJson: cmdJson_commandJson
818
+ };
819
+ return Bus.dispatchCommand(pluginCmdTopicKey, CommandTopic$ReventlessCore.encodeCommandJson(cmdJson));
820
+ };
821
+ let pluginStatusSubTopic = "onPluginStatusChange";
822
+ let uiFragmentSubTopic = "onUIFragmentChange";
823
+ let pluginEventsSubscribed = {
824
+ contents: false
825
+ };
826
+ let subscribeToPluginEvents = () => {
827
+ if (pluginEventsSubscribed.contents) {
828
+ return;
829
+ }
830
+ pluginEventsSubscribed.contents = true;
831
+ let publishStatus = (name, status) => LocalGraphQL_SubscriptionResolvers$ReventlessLocal.publish(pluginStatusSubTopic, Object.fromEntries([
832
+ [
833
+ "pluginId",
834
+ name
835
+ ],
836
+ [
837
+ "status",
838
+ status
839
+ ]
840
+ ]));
841
+ let publishUIFragment = (name, changeKind, manifest) => LocalGraphQL_SubscriptionResolvers$ReventlessLocal.publish(uiFragmentSubTopic, Object.fromEntries([
842
+ [
843
+ "pluginId",
844
+ name
845
+ ],
846
+ [
847
+ "changeKind",
848
+ changeKind
849
+ ],
850
+ [
851
+ "manifest",
852
+ manifest
853
+ ]
854
+ ]));
855
+ Bus.subscribeToEvents(pluginEventTopicKey, async (_service, _meta, eventJson) => {
856
+ let def;
857
+ try {
858
+ def = S.convertOrThrow(eventJson, PluginSpec$ReventlessCore.eventSchema);
859
+ } catch (exn) {
860
+ return;
861
+ }
862
+ switch (def.TAG) {
863
+ case "VersionDisconnected" :
864
+ return publishStatus(def._0.name, "Disconnected");
865
+ case "VersionDeactivated" :
866
+ return publishStatus(def._0.name, "Inactive");
867
+ case "VersionRetired" :
868
+ return publishStatus(def._0.name, "Retired");
869
+ case "VersionDetected" :
870
+ case "VersionSuperseded" :
871
+ case "IncompatiblePluginDetected" :
872
+ return;
873
+ case "UIFragmentRegistered" :
874
+ let data = def._0;
875
+ return publishUIFragment(Plugin$ReventlessCore.name(data.pluginId), "Registered", S.reverseConvertToJsonOrThrow(data.manifest, Plugin$Reventless.uiFragmentManifestSchema));
876
+ case "UIFragmentUpdated" :
877
+ let data$1 = def._0;
878
+ return publishUIFragment(Plugin$ReventlessCore.name(data$1.pluginId), "Updated", S.reverseConvertToJsonOrThrow(data$1.newManifest, Plugin$Reventless.uiFragmentManifestSchema));
879
+ case "UIFragmentDeregistered" :
880
+ return publishUIFragment(Plugin$ReventlessCore.name(def._0.pluginId), "Deregistered", null);
881
+ default:
882
+ return publishStatus(def._0.name, "Connected");
883
+ }
884
+ });
885
+ };
886
+ let connectPlugin = pluginComponents => {
887
+ pluginComponents.forEach(plugin => {
888
+ let outputs = Component$ReventlessCore.outputs(plugin);
889
+ Pulumi.all([
890
+ outputs.id,
891
+ outputs.version,
892
+ outputs.eventCollector,
893
+ outputs.extensionPoints,
894
+ outputs.extensions,
895
+ outputs.apiSchemaFragment,
896
+ outputs.uiFragments,
897
+ outputs.pluginStructure
898
+ ]).apply(param => {
899
+ let id = param[0];
900
+ let pluginName = Stdlib_Option.getOr(id.split("@")[0], id);
901
+ let pluginDefinition = {
902
+ id: id,
903
+ name: pluginName,
904
+ version: param[1],
905
+ extensionPoints: Object.entries(param[3]).map(param => {
906
+ let epName = param[0];
907
+ return {
908
+ name: epName,
909
+ commandTopic: epName,
910
+ eventTopic: param[1].name
911
+ };
912
+ }),
913
+ extensions: Object.entries(param[4]).map(param => {
914
+ let ext = param[1];
915
+ return {
916
+ name: ext.name,
917
+ extensionPointName: ext.extensionPointName,
918
+ dcbSources: []
919
+ };
920
+ }),
921
+ eventCollector: param[2].name,
922
+ extensionProtocols: [],
923
+ apiSchemaFragment: param[5],
924
+ apiTarget: undefined,
925
+ uiFragments: param[6],
926
+ structure: param[7],
927
+ dcbEventLog: undefined
928
+ };
929
+ dispatchPluginCommand(pluginName, {
930
+ TAG: "Connect",
931
+ _0: pluginDefinition
932
+ });
933
+ });
934
+ });
935
+ };
936
+ let seedUIFragmentRegistryQueryDb = pluginComponents => {
937
+ let uiFragmentOps = ensureUIFragmentRegistryQueryDbStore();
938
+ pluginComponents.forEach(plugin => {
939
+ let outputs = Component$ReventlessCore.outputs(plugin);
940
+ Pulumi.all([
941
+ outputs.id,
942
+ outputs.uiFragments
943
+ ]).apply(param => {
944
+ let uiFragments = param[1];
945
+ if (uiFragments === undefined) {
946
+ return;
947
+ }
948
+ let id = param[0];
949
+ let state_remoteEntryUrl = uiFragments.remoteEntryUrl;
950
+ let state_panels = uiFragments.panels;
951
+ let state_pages = uiFragments.pages;
952
+ let state_registeredAt = new Date().toISOString();
953
+ let state_updatedAt = new Date().toISOString();
954
+ let state = {
955
+ pluginId: id,
956
+ remoteEntryUrl: state_remoteEntryUrl,
957
+ panels: state_panels,
958
+ pages: state_pages,
959
+ registeredAt: state_registeredAt,
960
+ updatedAt: state_updatedAt
961
+ };
962
+ let entry = S.reverseConvertToJsonOrThrow(state, UIFragmentRegistryReadModelSpec$ReventlessCore.stateSchema);
963
+ uiFragmentOps.save(id, entry, "Any", undefined);
964
+ });
965
+ });
966
+ };
967
+ let extractExtensionWirings = (pluginName, pluginVersion, pluginOutputs) => pluginOutputs.extensions.apply(exts => Object.values(exts).map(ext => {
968
+ let providerPlugin = ext.extensionPointName.split(".")[0];
969
+ return {
970
+ extensionName: ext.name,
971
+ extensionPointName: ext.extensionPointName,
972
+ providerPlugin: providerPlugin,
973
+ providerVersion: "",
974
+ subscriberPlugin: pluginName,
975
+ subscriberVersion: pluginVersion
976
+ };
977
+ }));
978
+ let firePluginDeployedHooks = (builtInfos, pluginOutputs) => {
979
+ let environment = Pulumi.getStack();
980
+ builtInfos.forEach((info, i) => {
981
+ let hook = Plugin_Helpers$ReventlessCore.onPluginDeployedHook.contents;
982
+ if (hook === undefined) {
983
+ return;
984
+ }
985
+ let outputs = Stdlib_Option.flatMap(pluginOutputs, arr => arr[i]);
986
+ let wiringsOutput = outputs !== undefined ? extractExtensionWirings(info.name, info.version, outputs) : Pulumi.output([]);
987
+ wiringsOutput.apply(wirings => {
988
+ let deployedInfo_name = info.name;
989
+ let deployedInfo_version = info.version;
990
+ let deployedInfo_deployedAt = new Date().toISOString();
991
+ let deployedInfo_deploymentId = new Date().toISOString();
992
+ let deployedInfo_kind = info.kind;
993
+ let deployedInfo_displayName = info.displayName;
994
+ let deployedInfo_vendor = info.vendor;
995
+ let deployedInfo_architectureType = info.architectureType;
996
+ let deployedInfo_components = info.components.map(c => ({
997
+ name: c.name,
998
+ kind: c.kind,
999
+ schema: c.schema,
1000
+ resources: [],
1001
+ subComponents: []
1002
+ }));
1003
+ let deployedInfo = {
1004
+ name: deployedInfo_name,
1005
+ version: deployedInfo_version,
1006
+ environment: environment,
1007
+ stackName: environment,
1008
+ deployedAt: deployedInfo_deployedAt,
1009
+ actor: "local",
1010
+ deploymentId: deployedInfo_deploymentId,
1011
+ kind: deployedInfo_kind,
1012
+ displayName: deployedInfo_displayName,
1013
+ vendor: deployedInfo_vendor,
1014
+ architectureType: deployedInfo_architectureType,
1015
+ components: deployedInfo_components,
1016
+ extensionWirings: wirings
1017
+ };
1018
+ hook(deployedInfo);
1019
+ });
1020
+ });
1021
+ };
1022
+ let startServers = () => {
1023
+ if (Config.splitApi) {
1024
+ UserStore$ReventlessLocal.autoLoadOnce();
1025
+ DomainGraphQL_Server$ReventlessLocal.start(domainPort, undefined, undefined);
1026
+ DomainMCP_Server$ReventlessLocal.start(domainMcpPort, undefined);
1027
+ PlatformGraphQL_Server$ReventlessLocal.start(platformPort, Auth_GraphqlContext$ReventlessLocal.buildAuthContext, undefined);
1028
+ PlatformMCP_Server$ReventlessLocal.start(platformMcpPort, undefined);
1029
+ }
1030
+ if (graphqlDebug) {
1031
+ DomainGraphQL_Server$ReventlessLocal.printDiagnostics();
1032
+ DomainMCP_Server$ReventlessLocal.printDiagnostics();
1033
+ if (Config.splitApi) {
1034
+ PlatformGraphQL_Server$ReventlessLocal.printDiagnostics();
1035
+ PlatformMCP_Server$ReventlessLocal.printDiagnostics();
1036
+ }
1037
+ }
1038
+ Plugin_Helpers$ReventlessCore.firePlatformDeployedHook({
1039
+ name: "local",
1040
+ environment: Pulumi.getStack(),
1041
+ region: "local",
1042
+ domainApiEndpoint: "http://localhost:4000/graphql",
1043
+ domainApiRoleArn: "local",
1044
+ platformApiEndpoint: Config.splitApi ? "http://localhost:4001/graphql" : "http://localhost:4000/graphql",
1045
+ platformApiRoleArn: "local",
1046
+ adminResources: []
1047
+ });
1048
+ };
1049
+ let adminMutationSdl = mutations => mutations.map(field => {
1050
+ let suffix = ": String!";
1051
+ let n = field.length - suffix.length | 0;
1052
+ if (n > 0 && field.endsWith(suffix)) {
1053
+ return field.slice(0, n) + ": CommandResult!";
1054
+ } else {
1055
+ return field;
1056
+ }
1057
+ });
1058
+ let commandAccepted = (msgId, entityId) => Object.fromEntries([
1059
+ [
1060
+ "__typename",
1061
+ "CommandAccepted"
1062
+ ],
1063
+ [
1064
+ "msgId",
1065
+ msgId
1066
+ ],
1067
+ [
1068
+ "entityId",
1069
+ Stdlib_Option.getOr(Stdlib_Option.map(entityId, prim => prim), null)
1070
+ ],
1071
+ [
1072
+ "eventCount",
1073
+ 0
1074
+ ]
1075
+ ]);
1076
+ let connectionResponse = items => {
1077
+ let edges = items.map((item, i) => Object.fromEntries([
1078
+ [
1079
+ "node",
1080
+ item
1081
+ ],
1082
+ [
1083
+ "cursor",
1084
+ i.toString()
1085
+ ]
1086
+ ]));
1087
+ let hasItems = edges.length !== 0;
1088
+ return Object.fromEntries([
1089
+ [
1090
+ "edges",
1091
+ edges
1092
+ ],
1093
+ [
1094
+ "pageInfo",
1095
+ Object.fromEntries([
1096
+ [
1097
+ "hasNextPage",
1098
+ false
1099
+ ],
1100
+ [
1101
+ "hasPreviousPage",
1102
+ false
1103
+ ],
1104
+ [
1105
+ "startCursor",
1106
+ hasItems ? "0" : null
1107
+ ],
1108
+ [
1109
+ "endCursor",
1110
+ hasItems ? (edges.length - 1 | 0).toString() : null
1111
+ ]
1112
+ ])
1113
+ ]
1114
+ ]);
1115
+ };
1116
+ let registerAdminItemsAndIndexResolvers = (queryResolvers, live) => {
1117
+ PluginBaseFragment$ReventlessCore.queryEntries.forEach(entry => {
1118
+ let queryDbName = Stdlib_Option.getOr(entry.specName, entry.returnTypeName);
1119
+ let match = entry.subIdField;
1120
+ if (match !== undefined) {
1121
+ queryResolvers[entry.singleFieldName + "Items"] = async (_root, args, _ctx) => {
1122
+ if (!live) {
1123
+ return connectionResponse([]);
1124
+ }
1125
+ let id = Stdlib_Option.getOr(Stdlib_Option.flatMap(Stdlib_Option.flatMap(Stdlib_JSON.Decode.object(args), d => d["id"]), Stdlib_JSON.Decode.string), "");
1126
+ let ops = Bus.getQueryDb(queryDbName);
1127
+ return connectionResponse(ops !== undefined ? await Effect.runPromise(Effect.catchAll(Stream.runCollect(ops.loadStream(id)), param => Effect.succeed([]))) : []);
1128
+ };
1129
+ }
1130
+ let indexes = entry.indexQueries;
1131
+ if (indexes !== undefined) {
1132
+ indexes.forEach(ic => {
1133
+ let stripped = ic.index.startsWith("by") && ic.index.length > 2 ? ic.index.slice(2, ic.index.length) : ic.index;
1134
+ let fieldName = entry.singleFieldName + "By" + Stdlib_String.capitalize(stripped);
1135
+ queryResolvers[fieldName] = async (_root, _args, _ctx) => connectionResponse([]);
1136
+ });
1137
+ return;
1138
+ }
1139
+ });
1140
+ };
1141
+ let makePlatform = (version, plugins) => {
1142
+ log.info("Platform", undefined, `v` + version);
1143
+ log.info("Platform", undefined, `silent: ` + Stdlib_Bool.toString(Config.silent) + `, splitApi: ` + Stdlib_Bool.toString(Config.splitApi) + `, cloner: ` + Stdlib_Bool.toString(Config.cloner));
1144
+ let match = Config.backend;
1145
+ let tmp;
1146
+ tmp = typeof match !== "object" ? "backend: memory" : `backend: sqlite (` + match.path + (
1147
+ match.resetOnStart ? ", resetOnStart" : ""
1148
+ ) + `)`;
1149
+ log.info("Platform", undefined, tmp);
1150
+ let scheduler = makeScheduler();
1151
+ hooks_scheduler.contents = scheduler;
1152
+ hooks_api.contents = {
1153
+ val: undefined
1154
+ };
1155
+ hooks_apiRole.contents = {
1156
+ val: undefined
1157
+ };
1158
+ let admin = Admin.construct(version, [], [LocalPluginAggregate], [{
1159
+ Spec: PluginsReadModel.Spec,
1160
+ sourceNames: PluginsReadModel.sourceNames,
1161
+ make: PluginsReadModel.make,
1162
+ outputs: PluginsReadModel.outputs,
1163
+ operations: PluginsReadModel.operations,
1164
+ finish: PluginsReadModel.finish
1165
+ }], scheduler, LocalPluginSpec$ReventlessLocal.resourceNaming, undefined, undefined, [], [], [], [], []);
1166
+ hooks_adminExtensionPoints.contents = admin.extensionPointsOutputs.apply(eps => Object.fromEntries(eps.map(ep => [
1167
+ ep.name,
1168
+ ep
1169
+ ])));
1170
+ let environment = Pulumi.getStack();
1171
+ let existingBuiltHook = Plugin_Helpers$ReventlessCore.onPluginBuiltHook.contents;
1172
+ let builtInfos = {
1173
+ contents: []
1174
+ };
1175
+ Plugin_Helpers$ReventlessCore.registerOnPluginBuilt(info => {
1176
+ Stdlib_Option.forEach(existingBuiltHook, h => h(info));
1177
+ builtInfos.contents.push(info);
1178
+ });
1179
+ let plugins$1 = plugins.map(plugin => plugin.make());
1180
+ Plugin_Helpers$ReventlessCore.onPluginBuiltHook.contents = existingBuiltHook;
1181
+ let allPluginOutputs = plugins$1.map(Component$ReventlessCore.outputs);
1182
+ firePluginDeployedHooks(builtInfos.contents, allPluginOutputs);
1183
+ plugins$1.forEach(plugin => {
1184
+ let outputs = Component$ReventlessCore.outputs(plugin);
1185
+ Pulumi.all([
1186
+ outputs.eventCollector,
1187
+ outputs.extensions
1188
+ ]).apply(param => {
1189
+ let eventCollector = param[0];
1190
+ Object.entries(param[1]).forEach(param => {
1191
+ let epTopicKey = param[1].extensionPointName.replace(".", "") + "ExtPointEventTopic";
1192
+ Bus.subscribeEventCollectorToTopic(eventCollector.name, epTopicKey);
1193
+ });
1194
+ });
1195
+ });
1196
+ Plugin_Helpers$ReventlessCore.firePlatformDeployedHook({
1197
+ name: "local",
1198
+ environment: environment,
1199
+ region: "local",
1200
+ domainApiEndpoint: "http://localhost:4000/graphql",
1201
+ domainApiRoleArn: "local",
1202
+ platformApiEndpoint: "http://localhost:4000/graphql",
1203
+ platformApiRoleArn: "local",
1204
+ adminResources: []
1205
+ });
1206
+ subscribeToPluginEvents();
1207
+ connectPlugin(plugins$1);
1208
+ seedUIFragmentRegistryQueryDb(plugins$1);
1209
+ seedPluginStructuresStore(plugins$1);
1210
+ pluginStructuresStore.contents[Platform_Admin_Structure$ReventlessCore.pluginId] = Platform_Admin_Structure$ReventlessCore.structure;
1211
+ CommandGeneratorResolvers_GraphQL$ReventlessLocal.setPluginStatusGate(field => {
1212
+ let parts = field.split("_");
1213
+ let pluginPrefix = Stdlib_Option.getOr(parts[0], "");
1214
+ if (pluginPrefix === "Platform") {
1215
+ return;
1216
+ }
1217
+ let statusByName = {};
1218
+ let scanAll = Bus.getQueryDbScan(PluginsReadModelSpec$ReventlessCore.name);
1219
+ if (scanAll !== undefined) {
1220
+ scanAll().forEach(json => {
1221
+ let state;
1222
+ try {
1223
+ state = S.convertOrThrow(json, PluginsReadModelSpec$ReventlessCore.stateSchema);
1224
+ } catch (exn) {
1225
+ return;
1226
+ }
1227
+ statusByName[state.name] = state.status;
1228
+ });
1229
+ }
1230
+ let match = statusByName[pluginPrefix];
1231
+ if (match === undefined) {
1232
+ return;
1233
+ }
1234
+ switch (match) {
1235
+ case "Connected" :
1236
+ return;
1237
+ case "Disconnected" :
1238
+ return [
1239
+ "PluginUnavailable",
1240
+ "plugin is disconnected"
1241
+ ];
1242
+ case "Inactive" :
1243
+ return [
1244
+ "PluginInactive",
1245
+ "plugin is inactive"
1246
+ ];
1247
+ case "Retired" :
1248
+ return [
1249
+ "PluginRetired",
1250
+ "plugin version has been retired"
1251
+ ];
1252
+ }
1253
+ });
1254
+ currentDeployTarget.contents = "Platform";
1255
+ let adminQueryEntry = PluginBaseFragment$ReventlessCore.queryEntries[0];
1256
+ let singleQueryField = adminQueryEntry.singleFieldName;
1257
+ let listQueryField = adminQueryEntry.listFieldName;
1258
+ let adminMutationEntries = AdminApi$ReventlessCore.mutationEntries(Config.cloner);
1259
+ let adminMutationFieldNames = adminMutationEntries.flatMap(entry => entry.fieldNames);
1260
+ let platformGraphQL = resolveTargetGraphQL();
1261
+ let platformMCP = resolveTargetMCP();
1262
+ let baseParts = GraphQL_Stitcher$ReventlessCore.decode(AdminApi$ReventlessCore.baseFragment(Config.cloner));
1263
+ platformGraphQL.registerTypes(baseParts.types);
1264
+ let queryResolvers = {};
1265
+ queryResolvers[singleQueryField] = async (_root, args, _ctx) => {
1266
+ let id = Stdlib_Option.getOr(Stdlib_Option.flatMap(Stdlib_Option.flatMap(Stdlib_JSON.Decode.object(args), d => d["id"]), Stdlib_JSON.Decode.string), "");
1267
+ let ops = Bus.getQueryDb(PluginsReadModelSpec$ReventlessCore.name);
1268
+ if (ops === undefined) {
1269
+ return null;
1270
+ }
1271
+ let items = await Effect.runPromise(Effect.catchAll(Stream.runCollect(ops.loadStream(id)), param => Effect.succeed([])));
1272
+ return Stdlib_Option.getOr(items[0], null);
1273
+ };
1274
+ queryResolvers[listQueryField] = async (_root, _args, _ctx) => {
1275
+ let scanAll = Bus.getQueryDbScan(PluginsReadModelSpec$ReventlessCore.name);
1276
+ return connectionResponse(scanAll !== undefined ? scanAll() : []);
1277
+ };
1278
+ queryResolvers["Platform_ComponentDefinitions"] = async (_root, _args, _ctx) => {
1279
+ let dict = {};
1280
+ let scanAll = Bus.getQueryDbScan(PluginsReadModelSpec$ReventlessCore.name);
1281
+ if (scanAll !== undefined) {
1282
+ scanAll().forEach(json => {
1283
+ let state;
1284
+ try {
1285
+ state = S.convertOrThrow(json, PluginsReadModelSpec$ReventlessCore.stateSchema);
1286
+ } catch (exn) {
1287
+ return;
1288
+ }
1289
+ let id = state.name + "@" + state.version;
1290
+ dict[id] = state.status;
1291
+ });
1292
+ }
1293
+ let latestByName = {};
1294
+ Object.entries(pluginStructuresStore.contents).forEach(param => {
1295
+ let def = param[1];
1296
+ let pluginId = param[0];
1297
+ let connected = true;
1298
+ if (pluginId !== Platform_Admin_Structure$ReventlessCore.pluginId) {
1299
+ let match = dict[pluginId];
1300
+ let tmp;
1301
+ tmp = match === "Connected";
1302
+ connected = tmp;
1303
+ }
1304
+ if (!connected) {
1305
+ return;
1306
+ }
1307
+ let name = Plugin$ReventlessCore.name(pluginId);
1308
+ let version = Plugin$ReventlessCore.version(pluginId);
1309
+ let match$1 = latestByName[name];
1310
+ if (match$1 !== undefined && Plugin$ReventlessCore.compareVersions(version, match$1[0]) <= 0) {
1311
+ return;
1312
+ } else {
1313
+ latestByName[name] = [
1314
+ version,
1315
+ [
1316
+ pluginId,
1317
+ def
1318
+ ]
1319
+ ];
1320
+ return;
1321
+ }
1322
+ });
1323
+ return Object.values(latestByName).map(param => {
1324
+ let match = param[1];
1325
+ return Platform_ComponentDefinitionsApi$ReventlessCore.encodePluginStructureEntry(match[0], match[1]);
1326
+ });
1327
+ };
1328
+ queryResolvers["Platform_UIFragments"] = async (_root, _args, _ctx) => {
1329
+ let scanAll = Bus.getQueryDbScan(UIFragmentRegistryReadModelSpec$ReventlessCore.name);
1330
+ let items = scanAll !== undefined ? scanAll() : [];
1331
+ let latestByName = {};
1332
+ items.forEach(item => {
1333
+ let state;
1334
+ try {
1335
+ state = S.parseOrThrow(item, UIFragmentRegistryReadModelSpec$ReventlessCore.stateSchema);
1336
+ } catch (exn) {
1337
+ return;
1338
+ }
1339
+ let name = Plugin$ReventlessCore.name(state.pluginId);
1340
+ let version = Plugin$ReventlessCore.version(state.pluginId);
1341
+ let match = latestByName[name];
1342
+ if (match !== undefined && Plugin$ReventlessCore.compareVersions(version, match[0]) <= 0) {
1343
+ return;
1344
+ } else {
1345
+ latestByName[name] = [
1346
+ version,
1347
+ state
1348
+ ];
1349
+ return;
1350
+ }
1351
+ });
1352
+ return Object.values(latestByName).map(param => Platform_UIFragmentsApi$ReventlessCore.encodeUIFragmentEntry(param[1]));
1353
+ };
1354
+ registerAdminItemsAndIndexResolvers(queryResolvers, true);
1355
+ platformGraphQL.registerQueries(baseParts.queries, queryResolvers);
1356
+ let argId = args => Stdlib_Option.getOr(Stdlib_Option.flatMap(Stdlib_Option.flatMap(Stdlib_JSON.Decode.object(args), d => d["id"]), Stdlib_JSON.Decode.string), "");
1357
+ let currentVersionOf = pluginName => {
1358
+ let scanAll = Bus.getQueryDbScan(PluginsReadModelSpec$ReventlessCore.name);
1359
+ if (scanAll !== undefined) {
1360
+ return Stdlib_Array.findMap(scanAll(), json => {
1361
+ let state;
1362
+ try {
1363
+ state = S.convertOrThrow(json, PluginsReadModelSpec$ReventlessCore.stateSchema);
1364
+ } catch (exn) {
1365
+ return;
1366
+ }
1367
+ if (state.name === pluginName) {
1368
+ return state.version;
1369
+ }
1370
+ });
1371
+ }
1372
+ };
1373
+ let argVersion = args => Stdlib_Option.flatMap(Stdlib_Option.flatMap(Stdlib_JSON.Decode.object(args), d => d["_0"]), Stdlib_JSON.Decode.string);
1374
+ let dispatchLifecycle = (field, args, makeCommand) => {
1375
+ let msgId = Message$ReventlessCore.uuid();
1376
+ let pluginName = argId(args);
1377
+ let v = argVersion(args);
1378
+ let version = v !== undefined && v !== "" ? v : currentVersionOf(pluginName);
1379
+ if (version !== undefined) {
1380
+ log.info("Admin", undefined, field + `(` + pluginName + `@` + version + `): dispatching to aggregate`);
1381
+ dispatchPluginCommand(pluginName, makeCommand(version));
1382
+ } else {
1383
+ log.warn("Admin", undefined, field + `(` + pluginName + `): plugin not found`);
1384
+ }
1385
+ return commandAccepted(msgId, pluginName);
1386
+ };
1387
+ let activateField = Api_Naming$ReventlessCore.adminField("Plugin_Activate");
1388
+ let deactivateField = Api_Naming$ReventlessCore.adminField("Plugin_Deactivate");
1389
+ let retireField = Api_Naming$ReventlessCore.adminField("Plugin_Retire");
1390
+ let mutationResolvers = {};
1391
+ mutationResolvers[activateField] = async (_root, args, _ctx) => dispatchLifecycle(activateField, args, v => ({
1392
+ TAG: "Activate",
1393
+ _0: v
1394
+ }));
1395
+ mutationResolvers[deactivateField] = async (_root, args, _ctx) => dispatchLifecycle(deactivateField, args, v => ({
1396
+ TAG: "Deactivate",
1397
+ _0: v
1398
+ }));
1399
+ mutationResolvers[retireField] = async (_root, args, _ctx) => dispatchLifecycle(retireField, args, v => ({
1400
+ TAG: "Retire",
1401
+ _0: v
1402
+ }));
1403
+ adminMutationFieldNames.forEach(field => {
1404
+ if (Stdlib_Option.isNone(mutationResolvers[field])) {
1405
+ mutationResolvers[field] = async (_root, _args, _ctx) => commandAccepted(Message$ReventlessCore.uuid(), undefined);
1406
+ return;
1407
+ }
1408
+ });
1409
+ let makeUIEvent = (pluginId, changeKind, manifest) => Object.fromEntries([
1410
+ [
1411
+ "pluginId",
1412
+ Plugin$ReventlessCore.name(pluginId)
1413
+ ],
1414
+ [
1415
+ "changeKind",
1416
+ changeKind
1417
+ ],
1418
+ [
1419
+ "manifest",
1420
+ manifest
1421
+ ]
1422
+ ]);
1423
+ let addUIFragmentMutation = (fieldName, changeKind) => {
1424
+ mutationResolvers[fieldName] = async (_root, args, _ctx) => {
1425
+ let obj = Stdlib_Option.getOr(Stdlib_JSON.Decode.object(args), {});
1426
+ let pluginId = Stdlib_Option.getOr(Stdlib_Option.flatMap(obj["pluginId"], Stdlib_JSON.Decode.string), "");
1427
+ let manifest = Stdlib_Option.getOr(obj["manifest"], null);
1428
+ let event = makeUIEvent(pluginId, changeKind, manifest);
1429
+ LocalGraphQL_SubscriptionResolvers$ReventlessLocal.publish(uiFragmentSubTopic, event);
1430
+ return event;
1431
+ };
1432
+ };
1433
+ addUIFragmentMutation(Api_Naming$ReventlessCore.adminField("UIFragmentRegistered"), "Registered");
1434
+ addUIFragmentMutation(Api_Naming$ReventlessCore.adminField("UIFragmentUpdated"), "Updated");
1435
+ addUIFragmentMutation(Api_Naming$ReventlessCore.adminField("UIFragmentDeregistered"), "Deregistered");
1436
+ CommandGeneratorResolvers_GraphQL$ReventlessLocal.ensureCommandResultTypes(platformGraphQL);
1437
+ platformGraphQL.registerMutations(adminMutationSdl(baseParts.mutations), mutationResolvers);
1438
+ adminRegisteredServers.contents.push(platformGraphQL);
1439
+ platformGraphQL.registerSubscriptions([
1440
+ " onUIFragmentChange: UIFragmentChangeEvent",
1441
+ " onPluginStatusChange: PluginStatusChangeEvent"
1442
+ ], Object.fromEntries([
1443
+ [
1444
+ "onUIFragmentChange",
1445
+ LocalGraphQL_SubscriptionResolvers$ReventlessLocal.makeFieldResolver(uiFragmentSubTopic)
1446
+ ],
1447
+ [
1448
+ "onPluginStatusChange",
1449
+ LocalGraphQL_SubscriptionResolvers$ReventlessLocal.makeFieldResolver(pluginStatusSubTopic)
1450
+ ]
1451
+ ]));
1452
+ let adminFieldToQueryDb = Object.fromEntries([
1453
+ [
1454
+ singleQueryField,
1455
+ PluginsReadModelSpec$ReventlessCore.name
1456
+ ],
1457
+ [
1458
+ listQueryField,
1459
+ PluginsReadModelSpec$ReventlessCore.name
1460
+ ]
1461
+ ]);
1462
+ platformMCP.registerResourcesFromEntries("Admin", PluginBaseFragment$ReventlessCore.queryEntries, async (resourceName, uri) => {
1463
+ let segments = uri.split("/");
1464
+ let id = Stdlib_Option.getOr(segments.at(-1), "");
1465
+ let queryDbName = Stdlib_Option.getOr(adminFieldToQueryDb[resourceName], PluginsReadModelSpec$ReventlessCore.name);
1466
+ let ops = Bus.getQueryDb(queryDbName);
1467
+ if (ops === undefined) {
1468
+ return null;
1469
+ }
1470
+ if (id.length > 0 && id !== resourceName) {
1471
+ let items = await Effect.runPromise(Effect.catchAll(Stream.runCollect(ops.loadStream(id)), param => Effect.succeed([])));
1472
+ return Stdlib_Option.getOr(items[0], null);
1473
+ }
1474
+ let scanAll = Bus.getQueryDbScan(queryDbName);
1475
+ if (scanAll !== undefined) {
1476
+ return scanAll();
1477
+ } else {
1478
+ return [];
1479
+ }
1480
+ });
1481
+ platformMCP.registerToolsFromEntries("Admin", adminMutationEntries, async (toolName, args, _identity) => {
1482
+ let resolver = platformGraphQL.getMutationResolver(toolName);
1483
+ if (resolver === undefined) {
1484
+ return `error: no handler found for tool ` + toolName;
1485
+ }
1486
+ let result = await resolver(null, args, null);
1487
+ let s = Stdlib_JSON.Decode.string(result);
1488
+ if (s !== undefined) {
1489
+ return s;
1490
+ } else {
1491
+ return JSON.stringify(result);
1492
+ }
1493
+ });
1494
+ DomainGraphQL_Server$ReventlessLocal.registerTypes(GraphQL_Stitcher$ReventlessCore.relayBaseTypes);
1495
+ DomainGraphQL_Server$ReventlessLocal.registerQueries(GraphQL_Stitcher$ReventlessCore.relayBaseQueries, {});
1496
+ if (Config.splitApi) {
1497
+ PlatformGraphQL_Server$ReventlessLocal.registerTypes(GraphQL_Stitcher$ReventlessCore.relayBaseTypes);
1498
+ }
1499
+ currentDeployTarget.contents = "Domain";
1500
+ if (!Config.splitApi) {
1501
+ UserStore$ReventlessLocal.autoLoadOnce();
1502
+ DomainGraphQL_Server$ReventlessLocal.start(undefined, undefined, undefined);
1503
+ return DomainMCP_Server$ReventlessLocal.start(undefined, undefined);
1504
+ }
1505
+ };
1506
+ let deployPlatform = (version, param) => {
1507
+ log.info("Platform", undefined, `deployPlatform v` + version);
1508
+ let scheduler = makeScheduler();
1509
+ hooks_scheduler.contents = scheduler;
1510
+ hooks_api.contents = {
1511
+ val: undefined
1512
+ };
1513
+ hooks_apiRole.contents = {
1514
+ val: undefined
1515
+ };
1516
+ Admin.construct(version, [], [], [], scheduler, LocalPluginSpec$ReventlessLocal.resourceNaming, undefined, undefined, [], [], [], [], []);
1517
+ currentDeployTarget.contents = "Platform";
1518
+ let adminGraphQL = resolveTargetGraphQL();
1519
+ let adminMCP = resolveTargetMCP();
1520
+ let baseParts = GraphQL_Stitcher$ReventlessCore.decode(AdminApi$ReventlessCore.baseFragment(Config.cloner));
1521
+ adminGraphQL.registerTypes(baseParts.types);
1522
+ let queryResolvers = {};
1523
+ let adminQueryEntry = PluginBaseFragment$ReventlessCore.queryEntries[0];
1524
+ queryResolvers[adminQueryEntry.singleFieldName] = async (_root, _args, _ctx) => null;
1525
+ queryResolvers[adminQueryEntry.listFieldName] = async (_root, _args, _ctx) => connectionResponse([]);
1526
+ queryResolvers["Platform_UIFragments"] = async (_root, _args, _ctx) => [];
1527
+ registerAdminItemsAndIndexResolvers(queryResolvers, false);
1528
+ adminGraphQL.registerQueries(baseParts.queries, queryResolvers);
1529
+ let mutationResolvers = {};
1530
+ let adminMutationEntries = AdminApi$ReventlessCore.mutationEntries(Config.cloner);
1531
+ let adminMutationFieldNames = adminMutationEntries.flatMap(entry => entry.fieldNames);
1532
+ adminMutationFieldNames.forEach(field => {
1533
+ mutationResolvers[field] = async (_root, _args, _ctx) => commandAccepted(Message$ReventlessCore.uuid(), undefined);
1534
+ });
1535
+ let dpSubTopic = "onUIFragmentChange";
1536
+ let addUIFragmentMutation2 = (fieldName, changeKind) => {
1537
+ mutationResolvers[fieldName] = async (_root, args, _ctx) => {
1538
+ let obj = Stdlib_Option.getOr(Stdlib_JSON.Decode.object(args), {});
1539
+ let pluginId = Stdlib_Option.getOr(Stdlib_Option.flatMap(obj["pluginId"], Stdlib_JSON.Decode.string), "");
1540
+ let manifest = Stdlib_Option.getOr(obj["manifest"], null);
1541
+ let event = Object.fromEntries([
1542
+ [
1543
+ "pluginId",
1544
+ Plugin$ReventlessCore.name(pluginId)
1545
+ ],
1546
+ [
1547
+ "changeKind",
1548
+ changeKind
1549
+ ],
1550
+ [
1551
+ "manifest",
1552
+ manifest
1553
+ ]
1554
+ ]);
1555
+ LocalGraphQL_SubscriptionResolvers$ReventlessLocal.publish(dpSubTopic, event);
1556
+ return event;
1557
+ };
1558
+ };
1559
+ addUIFragmentMutation2(Api_Naming$ReventlessCore.adminField("UIFragmentRegistered"), "Registered");
1560
+ addUIFragmentMutation2(Api_Naming$ReventlessCore.adminField("UIFragmentUpdated"), "Updated");
1561
+ addUIFragmentMutation2(Api_Naming$ReventlessCore.adminField("UIFragmentDeregistered"), "Deregistered");
1562
+ CommandGeneratorResolvers_GraphQL$ReventlessLocal.ensureCommandResultTypes(adminGraphQL);
1563
+ adminGraphQL.registerMutations(adminMutationSdl(baseParts.mutations), mutationResolvers);
1564
+ adminGraphQL.registerSubscriptions([
1565
+ " onUIFragmentChange: UIFragmentChangeEvent",
1566
+ " onPluginStatusChange: PluginStatusChangeEvent"
1567
+ ], Object.fromEntries([
1568
+ [
1569
+ "onUIFragmentChange",
1570
+ LocalGraphQL_SubscriptionResolvers$ReventlessLocal.makeFieldResolver(dpSubTopic)
1571
+ ],
1572
+ [
1573
+ "onPluginStatusChange",
1574
+ LocalGraphQL_SubscriptionResolvers$ReventlessLocal.makeFieldResolver("onPluginStatusChange")
1575
+ ]
1576
+ ]));
1577
+ currentDeployTarget.contents = "Domain";
1578
+ adminGraphQL.start(Config.splitApi ? 4001 : 4000, Auth_GraphqlContext$ReventlessLocal.buildAuthContext, undefined);
1579
+ adminMCP.start(Config.splitApi ? 3002 : 3001, undefined);
1580
+ if (Config.splitApi) {
1581
+ DomainGraphQL_Server$ReventlessLocal.start(undefined, undefined, undefined);
1582
+ DomainMCP_Server$ReventlessLocal.start(undefined, undefined);
1583
+ }
1584
+ Plugin_Helpers$ReventlessCore.firePlatformDeployedHook({
1585
+ name: "local",
1586
+ environment: "local",
1587
+ region: "local",
1588
+ domainApiEndpoint: "http://localhost:4000/graphql",
1589
+ domainApiRoleArn: "local",
1590
+ platformApiEndpoint: Config.splitApi ? "http://localhost:4001/graphql" : "http://localhost:4000/graphql",
1591
+ platformApiRoleArn: "local",
1592
+ adminResources: []
1593
+ });
1594
+ return {};
1595
+ };
1596
+ let deployPlugin = (plugin, apiTargetOpt) => {
1597
+ let apiTarget = apiTargetOpt !== undefined ? apiTargetOpt : "Domain";
1598
+ let tmp;
1599
+ tmp = apiTarget === "Domain" ? "Domain" : "Platform";
1600
+ log.info("Platform", undefined, `deployPlugin target=` + tmp);
1601
+ currentDeployTarget.contents = apiTarget;
1602
+ StateViewSliceMaker.QueryDbResolvers.serverRef.contents = resolveTargetGraphQL();
1603
+ let tmp$1;
1604
+ tmp$1 = apiTarget === "Domain" ? domainRelaySupport : undefined;
1605
+ StateViewSliceMaker.QueryDbResolvers.relayRef.contents = tmp$1;
1606
+ let scheduler = makeScheduler();
1607
+ hooks_scheduler.contents = scheduler;
1608
+ hooks_api.contents = {
1609
+ val: undefined
1610
+ };
1611
+ hooks_apiRole.contents = {
1612
+ val: undefined
1613
+ };
1614
+ let admin = Admin.construct("", [], [LocalPluginAggregate], [{
1615
+ Spec: PluginsReadModel.Spec,
1616
+ sourceNames: PluginsReadModel.sourceNames,
1617
+ make: PluginsReadModel.make,
1618
+ outputs: PluginsReadModel.outputs,
1619
+ operations: PluginsReadModel.operations,
1620
+ finish: PluginsReadModel.finish
1621
+ }], scheduler, LocalPluginSpec$ReventlessLocal.resourceNaming, undefined, undefined, [], [], [], [], []);
1622
+ hooks_adminExtensionPoints.contents = admin.extensionPointsOutputs.apply(eps => Object.fromEntries(eps.map(ep => [
1623
+ ep.name,
1624
+ ep
1625
+ ])));
1626
+ let existingBuiltHook = Plugin_Helpers$ReventlessCore.onPluginBuiltHook.contents;
1627
+ let builtInfos = {
1628
+ contents: []
1629
+ };
1630
+ Plugin_Helpers$ReventlessCore.registerOnPluginBuilt(info => {
1631
+ Stdlib_Option.forEach(existingBuiltHook, h => h(info));
1632
+ builtInfos.contents.push(info);
1633
+ });
1634
+ let pluginComponent = plugin.make();
1635
+ Plugin_Helpers$ReventlessCore.onPluginBuiltHook.contents = existingBuiltHook;
1636
+ let adminGraphQL = resolveTargetGraphQL();
1637
+ if (!adminRegisteredServers.contents.some(s => s === adminGraphQL)) {
1638
+ let baseParts = GraphQL_Stitcher$ReventlessCore.decode(AdminApi$ReventlessCore.baseFragment(Config.cloner));
1639
+ adminGraphQL.registerTypes(baseParts.types);
1640
+ let queryResolvers = {};
1641
+ let adminQueryEntry = PluginBaseFragment$ReventlessCore.queryEntries[0];
1642
+ queryResolvers[adminQueryEntry.singleFieldName] = async (_root, _args, _ctx) => null;
1643
+ queryResolvers[adminQueryEntry.listFieldName] = async (_root, _args, _ctx) => connectionResponse([]);
1644
+ queryResolvers["Platform_UIFragments"] = async (_root, _args, _ctx) => {
1645
+ let scanAll = Bus.getQueryDbScan(UIFragmentRegistryReadModelSpec$ReventlessCore.name);
1646
+ let items = scanAll !== undefined ? scanAll() : [];
1647
+ return Stdlib_Array.filterMap(items, item => {
1648
+ let state;
1649
+ try {
1650
+ state = S.parseOrThrow(item, UIFragmentRegistryReadModelSpec$ReventlessCore.stateSchema);
1651
+ } catch (exn) {
1652
+ return;
1653
+ }
1654
+ return Platform_UIFragmentsApi$ReventlessCore.encodeUIFragmentEntry(state);
1655
+ });
1656
+ };
1657
+ queryResolvers["Platform_ComponentDefinitions"] = async (_root, _args, _ctx) => Object.entries(pluginStructuresStore.contents).map(param => Platform_ComponentDefinitionsApi$ReventlessCore.encodePluginStructureEntry(param[0], param[1]));
1658
+ registerAdminItemsAndIndexResolvers(queryResolvers, true);
1659
+ adminGraphQL.registerQueries(baseParts.queries, queryResolvers);
1660
+ let mutationResolvers = {};
1661
+ let adminMutationEntries = AdminApi$ReventlessCore.mutationEntries(Config.cloner);
1662
+ let adminMutationFieldNames = adminMutationEntries.flatMap(entry => entry.fieldNames);
1663
+ adminMutationFieldNames.forEach(field => {
1664
+ mutationResolvers[field] = async (_root, _args, _ctx) => commandAccepted(Message$ReventlessCore.uuid(), undefined);
1665
+ });
1666
+ let dpSubTopic2 = "onUIFragmentChange";
1667
+ let addUIFragmentMutation3 = (fieldName, changeKind) => {
1668
+ mutationResolvers[fieldName] = async (_root, args, _ctx) => {
1669
+ let obj = Stdlib_Option.getOr(Stdlib_JSON.Decode.object(args), {});
1670
+ let pluginId = Stdlib_Option.getOr(Stdlib_Option.flatMap(obj["pluginId"], Stdlib_JSON.Decode.string), "");
1671
+ let manifest = Stdlib_Option.getOr(obj["manifest"], null);
1672
+ let event = Object.fromEntries([
1673
+ [
1674
+ "pluginId",
1675
+ Plugin$ReventlessCore.name(pluginId)
1676
+ ],
1677
+ [
1678
+ "changeKind",
1679
+ changeKind
1680
+ ],
1681
+ [
1682
+ "manifest",
1683
+ manifest
1684
+ ]
1685
+ ]);
1686
+ LocalGraphQL_SubscriptionResolvers$ReventlessLocal.publish(dpSubTopic2, event);
1687
+ return event;
1688
+ };
1689
+ };
1690
+ addUIFragmentMutation3(Api_Naming$ReventlessCore.adminField("UIFragmentRegistered"), "Registered");
1691
+ addUIFragmentMutation3(Api_Naming$ReventlessCore.adminField("UIFragmentUpdated"), "Updated");
1692
+ addUIFragmentMutation3(Api_Naming$ReventlessCore.adminField("UIFragmentDeregistered"), "Deregistered");
1693
+ CommandGeneratorResolvers_GraphQL$ReventlessLocal.ensureCommandResultTypes(adminGraphQL);
1694
+ adminGraphQL.registerMutations(adminMutationSdl(baseParts.mutations), mutationResolvers);
1695
+ adminGraphQL.registerSubscriptions([" onUIFragmentChange: UIFragmentChangeEvent"], Object.fromEntries([[
1696
+ "onUIFragmentChange",
1697
+ LocalGraphQL_SubscriptionResolvers$ReventlessLocal.makeFieldResolver(dpSubTopic2)
1698
+ ]]));
1699
+ adminRegisteredServers.contents.push(adminGraphQL);
1700
+ }
1701
+ currentDeployTarget.contents = "Domain";
1702
+ StateViewSliceMaker.QueryDbResolvers.serverRef.contents = DomainGraphQL_Server$ReventlessLocal.asInterface;
1703
+ StateViewSliceMaker.QueryDbResolvers.relayRef.contents = domainRelaySupport;
1704
+ subscribeToPluginEvents();
1705
+ connectPlugin([pluginComponent]);
1706
+ seedUIFragmentRegistryQueryDb([pluginComponent]);
1707
+ seedPluginStructuresStore([pluginComponent]);
1708
+ let deployedPluginOutputs = [Component$ReventlessCore.outputs(pluginComponent)];
1709
+ firePluginDeployedHooks(builtInfos.contents, deployedPluginOutputs);
1710
+ Plugin_Helpers$ReventlessCore.replayPlatformDeployedHook();
1711
+ if (!Config.splitApi) {
1712
+ if (apiTarget === "Domain") {
1713
+ DomainGraphQL_Server$ReventlessLocal.start(undefined, undefined, undefined);
1714
+ DomainMCP_Server$ReventlessLocal.start(undefined, undefined);
1715
+ } else {
1716
+ PlatformGraphQL_Server$ReventlessLocal.start(4001, Auth_GraphqlContext$ReventlessLocal.buildAuthContext, undefined);
1717
+ PlatformMCP_Server$ReventlessLocal.start(3002, undefined);
1718
+ }
1719
+ }
1720
+ return {};
1721
+ };
1722
+ return {
1723
+ api: undefined,
1724
+ apiRole: undefined,
1725
+ Aggregate: Aggregate,
1726
+ ReadModel: ReadModel,
1727
+ ReadModelStream: ReadModelStream,
1728
+ ExtensionPoint: ExtensionPoint,
1729
+ Extension: Extension,
1730
+ Task: Task,
1731
+ Counter: {
1732
+ make: Counter.make,
1733
+ outputs: Counter.outputs,
1734
+ operations: Counter.operations
1735
+ },
1736
+ StateChangeSlice: StateChangeSlice,
1737
+ StateViewSlice: StateViewSlice,
1738
+ StateViewSliceStream: StateViewSliceStream,
1739
+ AutomationSlice: AutomationSlice,
1740
+ OutboundTranslationSlice: OutboundTranslationSlice,
1741
+ InboundTranslationSlice: InboundTranslationSlice,
1742
+ Api: Api,
1743
+ mcpSupported: true,
1744
+ Plugin: Plugin,
1745
+ makePlatform: makePlatform,
1746
+ deployPlatform: deployPlatform,
1747
+ deployPlugin: deployPlugin,
1748
+ startServers: startServers
1749
+ };
1750
+ }
1751
+
1752
+ function Make($star) {
1753
+ let backend = Backend$ReventlessLocal.fromEnv();
1754
+ TestRunner$ReventlessLocal.setup();
1755
+ if (typeof backend !== "object") {
1756
+ BackendState$ReventlessLocal.setMemory();
1757
+ } else {
1758
+ let path = backend.path;
1759
+ if (backend.resetOnStart) {
1760
+ Backend$ReventlessLocal.removeFileIfExists(path);
1761
+ }
1762
+ let db = SqliteDriver$ReventlessLocal.openDb(path);
1763
+ BackendState$ReventlessLocal.setSqlite(db, path);
1764
+ LocalBus$ReventlessLocal.seedEventTapSeq(EventLogStorage_Sqlite$ReventlessLocal.countAll(db) + DcbEventLogStorage_Sqlite$ReventlessLocal.countAll(db) | 0);
1765
+ }
1766
+ let Bus = LocalBus$ReventlessLocal.Impl({
1767
+ capacity: undefined,
1768
+ silent: false
1769
+ });
1770
+ let currentDeployTarget = {
1771
+ contents: "Domain"
1772
+ };
1773
+ let adminRegisteredServers = {
1774
+ contents: []
1775
+ };
1776
+ let domainRelaySupport = {
1777
+ encodeGlobalId: DomainGraphQL_Server$ReventlessLocal.encodeGlobalId,
1778
+ registerNodeType: DomainGraphQL_Server$ReventlessLocal.registerNodeType,
1779
+ registerNodeResolverCallback: DomainGraphQL_Server$ReventlessLocal.registerNodeResolverCallback,
1780
+ nodeTypeRegistry: DomainGraphQL_Server$ReventlessLocal.nodeTypeRegistry
1781
+ };
1782
+ let resolveTargetGraphQL = () => {
1783
+ let match = currentDeployTarget.contents;
1784
+ if (match === "Domain") {
1785
+ return DomainGraphQL_Server$ReventlessLocal.asInterface;
1786
+ } else {
1787
+ return PlatformGraphQL_Server$ReventlessLocal.asInterface;
1788
+ }
1789
+ };
1790
+ let resolveTargetMCP = () => {
1791
+ let match = currentDeployTarget.contents;
1792
+ if (match === "Domain") {
1793
+ return DomainMCP_Server$ReventlessLocal.asInterface;
1794
+ } else {
1795
+ return PlatformMCP_Server$ReventlessLocal.asInterface;
1796
+ }
1797
+ };
1798
+ let hooks_mutationResolverHook = (kind, fields, commandSchema, commandAuthorization) => {
1799
+ let server = resolveTargetGraphQL();
1800
+ if (kind === "Aggregate") {
1801
+ return CommandGeneratorResolvers_GraphQL$ReventlessLocal.register(fields, commandSchema, commandAuthorization, server);
1802
+ }
1803
+ fields.forEach(field => CommandGeneratorResolvers_GraphQL$ReventlessLocal.registerDcb(field, commandSchema, commandAuthorization, server));
1804
+ };
1805
+ let hooks_mutationBindHook = CommandGeneratorResolvers_GraphQL$ReventlessLocal.bindHandler;
1806
+ let hooks_inboundMutationResolverHook = (fieldName, externalInputSchema) => InboundTranslationResolvers_GraphQL$ReventlessLocal.register(fieldName, externalInputSchema, resolveTargetGraphQL());
1807
+ let hooks_inboundMutationBindReceiveHook = InboundTranslationResolvers_GraphQL$ReventlessLocal.bindReceive;
1808
+ let hooks_schemaTypeRegistrationHook = sdlTypes => resolveTargetGraphQL().registerTypes(sdlTypes);
1809
+ let hooks_mcpSchemaRegistrationHook = param => {
1810
+ let subscriptionFields = param.subscriptionFields;
1811
+ let eventLogEntries = param.eventLogEntries;
1812
+ let pluginName = param.pluginName;
1813
+ let mcp = resolveTargetMCP();
1814
+ mcp.registerToolsFromEntries(pluginName, param.mutationEntries, async (toolName, args, identity) => {
1815
+ let handlerRef = CommandGeneratorResolvers_GraphQL$ReventlessLocal.handlerRefs[toolName];
1816
+ if (handlerRef === undefined) {
1817
+ return `{"error":"no handler for ` + toolName + `"}`;
1818
+ }
1819
+ let generateCommand = handlerRef.contents;
1820
+ if (generateCommand === undefined) {
1821
+ return `{"error":"no handler for ` + toolName + `"}`;
1822
+ }
1823
+ let payload_meta = {
1824
+ ip: [],
1825
+ user: identity.userId,
1826
+ info: `mcp/tools/` + toolName
1827
+ };
1828
+ let payload = {
1829
+ command: toolName,
1830
+ arguments: args,
1831
+ meta: payload_meta,
1832
+ identity: identity
1833
+ };
1834
+ let outcome = await Effect.runPromise(generateCommand(payload));
1835
+ return JSON.stringify(CommandGeneratorResolvers_GraphQL$ReventlessLocal.commandOutcomeToJson(outcome));
1836
+ });
1837
+ mcp.registerResourcesFromEntries(pluginName, param.queryEntries, async (resourceName, uri) => {
1838
+ let segments = uri.split("/");
1839
+ let id = Stdlib_Option.getOr(segments.at(-1), "");
1840
+ let queryDbName = Stdlib_Option.getOr(Stdlib_Option.map(Object.entries(Plugin_Helpers$ReventlessCore.queryFieldNamesRegistry).find(param => {
1841
+ let entry = param[1];
1842
+ if (entry.singleFieldName === resourceName) {
1843
+ return true;
1844
+ } else {
1845
+ return entry.listFieldName === resourceName;
1846
+ }
1847
+ }), param => param[0]), resourceName);
1848
+ let ops = Bus.getQueryDb(queryDbName);
1849
+ if (ops === undefined) {
1850
+ return null;
1851
+ }
1852
+ if (id.length > 0 && id !== resourceName) {
1853
+ let items = await Effect.runPromise(Effect.catchAll(Stream.runCollect(ops.loadStream(id)), param => Effect.succeed([])));
1854
+ let item = items[0];
1855
+ if (item !== undefined) {
1856
+ return item;
1857
+ } else {
1858
+ return null;
1859
+ }
1860
+ }
1861
+ let scanAll = Bus.getQueryDbScan(queryDbName);
1862
+ if (scanAll !== undefined) {
1863
+ return scanAll();
1864
+ } else {
1865
+ return [];
1866
+ }
1867
+ });
1868
+ mcp.registerEventHistoryResourcesFromEntries(pluginName, eventLogEntries, async (resourceName, uri) => {
1869
+ let pathPart = uri.split("?")[0];
1870
+ let segments = pathPart.split("/");
1871
+ let entityId = Stdlib_Option.getOr(segments.at(-1), "");
1872
+ let parts = uri.split("?");
1873
+ let qs = parts[1];
1874
+ let match;
1875
+ if (qs !== undefined) {
1876
+ let params = {};
1877
+ qs.split("&").forEach(param => {
1878
+ let kv = param.split("=");
1879
+ let match = kv[0];
1880
+ let match$1 = kv[1];
1881
+ if (match !== undefined && match$1 !== undefined) {
1882
+ params[match] = match$1;
1883
+ return;
1884
+ }
1885
+ });
1886
+ match = [
1887
+ Stdlib_Option.flatMap(params["limit"], v => Stdlib_Int.fromString(v, undefined)),
1888
+ params["after"]
1889
+ ];
1890
+ } else {
1891
+ match = [
1892
+ undefined,
1893
+ undefined
1894
+ ];
1895
+ }
1896
+ let after = match[1];
1897
+ let limit = match[0];
1898
+ let makePaginatedResponse = (events, hasMore, nextAfter) => Object.fromEntries([
1899
+ [
1900
+ "events",
1901
+ events
1902
+ ],
1903
+ [
1904
+ "pagination",
1905
+ Object.fromEntries([
1906
+ [
1907
+ "hasMore",
1908
+ hasMore
1909
+ ],
1910
+ [
1911
+ "nextAfter",
1912
+ Stdlib_Option.mapOr(nextAfter, null, prim => prim)
1913
+ ]
1914
+ ])
1915
+ ]
1916
+ ]);
1917
+ let paginate = (events, getPosition) => {
1918
+ let filtered;
1919
+ if (after !== undefined) {
1920
+ let idx = events.findIndex(e => Stdlib_Option.mapOr(getPosition(e), false, p => p > after));
1921
+ filtered = idx >= 0 ? events.slice(idx, events.length) : [];
1922
+ } else {
1923
+ filtered = events;
1924
+ }
1925
+ let match = limit !== undefined && filtered.length > limit ? [
1926
+ filtered.slice(0, limit),
1927
+ true
1928
+ ] : [
1929
+ filtered,
1930
+ false
1931
+ ];
1932
+ let hasMore = match[1];
1933
+ let limited = match[0];
1934
+ let nextAfterVal = hasMore ? Stdlib_Option.flatMap(limited.at(-1), getPosition) : undefined;
1935
+ return makePaginatedResponse(limited, hasMore, nextAfterVal);
1936
+ };
1937
+ let matchingEntry = eventLogEntries.find(entry => resourceName.includes(entry.displayName.toLowerCase()));
1938
+ if (matchingEntry === undefined) {
1939
+ return makePaginatedResponse([], false, undefined);
1940
+ }
1941
+ let replay = Bus.getEventLogReplay(matchingEntry.busKey);
1942
+ if (replay !== undefined) {
1943
+ let events = await replay(entityId);
1944
+ return paginate(events, e => {
1945
+ let obj = Stdlib_JSON.Decode.object(e);
1946
+ if (obj !== undefined) {
1947
+ return Stdlib_Option.flatMap(obj["position"], Stdlib_JSON.Decode.string);
1948
+ }
1949
+ });
1950
+ }
1951
+ let read = Bus.getDcbEventLogRead(matchingEntry.busKey);
1952
+ if (read === undefined) {
1953
+ return makePaginatedResponse([], false, undefined);
1954
+ }
1955
+ let result = await read([], undefined);
1956
+ let filtered = entityId.length > 0 && entityId !== resourceName ? result.events.filter(e => e.tags.some(tag => tag.value === entityId)) : result.events;
1957
+ let serialized = filtered.map(e => Object.fromEntries([
1958
+ [
1959
+ "position",
1960
+ e.position
1961
+ ],
1962
+ [
1963
+ "event",
1964
+ e.eventType
1965
+ ],
1966
+ [
1967
+ "data",
1968
+ e.data
1969
+ ],
1970
+ [
1971
+ "tags",
1972
+ e.tags.map(t => Object.fromEntries([
1973
+ [
1974
+ "key",
1975
+ t.key
1976
+ ],
1977
+ [
1978
+ "value",
1979
+ t.value
1980
+ ]
1981
+ ]))
1982
+ ]
1983
+ ]));
1984
+ return paginate(serialized, e => {
1985
+ let obj = Stdlib_JSON.Decode.object(e);
1986
+ if (obj !== undefined) {
1987
+ return Stdlib_Option.flatMap(obj["position"], Stdlib_JSON.Decode.string);
1988
+ }
1989
+ });
1990
+ });
1991
+ if (subscriptionFields.length === 0) {
1992
+ return;
1993
+ }
1994
+ let server = resolveTargetGraphQL();
1995
+ eventLogEntries.forEach(entry => LocalGraphQL_SubscriptionResolvers$ReventlessLocal.bridgeSourceA(Bus.subscribeToEvents, entry.displayName, entry.busKey));
1996
+ let sourceAEntries = eventLogEntries.map(e => {
1997
+ let topic = LocalGraphQL_SubscriptionResolvers$ReventlessLocal.sourceATopic(e.displayName);
1998
+ return {
1999
+ fieldName: topic,
2000
+ topic: topic
2001
+ };
2002
+ });
2003
+ LocalGraphQL_SubscriptionResolvers$ReventlessLocal.registerAll(server, subscriptionFields, sourceAEntries, []);
2004
+ };
2005
+ let hooks_adminExtensionPoints = {
2006
+ contents: Pulumi.output({})
2007
+ };
2008
+ let hooks_scheduler = {
2009
+ contents: undefined
2010
+ };
2011
+ let hooks_schedulerRoleUrn = {
2012
+ contents: Pulumi.output("")
2013
+ };
2014
+ let hooks_api = {
2015
+ contents: undefined
2016
+ };
2017
+ let hooks_apiRole = {
2018
+ contents: undefined
2019
+ };
2020
+ let hooks_deployTarget = {
2021
+ contents: "Domain"
2022
+ };
2023
+ let hooks = {
2024
+ mutationResolverHook: hooks_mutationResolverHook,
2025
+ mutationBindHook: hooks_mutationBindHook,
2026
+ inboundMutationResolverHook: hooks_inboundMutationResolverHook,
2027
+ inboundMutationBindReceiveHook: hooks_inboundMutationBindReceiveHook,
2028
+ schemaTypeRegistrationHook: hooks_schemaTypeRegistrationHook,
2029
+ mcpSchemaRegistrationHook: hooks_mcpSchemaRegistrationHook,
2030
+ adminExtensionPoints: hooks_adminExtensionPoints,
2031
+ scheduler: hooks_scheduler,
2032
+ schedulerRoleUrn: hooks_schedulerRoleUrn,
2033
+ api: hooks_api,
2034
+ apiRole: hooks_apiRole,
2035
+ deployTarget: hooks_deployTarget
2036
+ };
2037
+ let AggregateMaker = Aggregate_Builder$ReventlessLocal.MakeWithHooks(Bus)({
2038
+ hooks: hooks
2039
+ });
2040
+ let ReadModelMaker = ReadModel_Builder$ReventlessLocal.Make(Bus);
2041
+ let ExtensionPointMaker = ExtensionPoint_Builder$ReventlessLocal.Make(Bus);
2042
+ let TaskMaker = Task_Builder$ReventlessLocal.Make(Bus);
2043
+ let StateViewSliceMaker = StateViewSlice_Builder$ReventlessLocal.Make(Bus);
2044
+ let AutomationSliceMaker = AutomationSlice_Builder$ReventlessLocal.Make(Bus);
2045
+ let OutboundTranslationSliceMaker = OutboundTranslationSlice_Builder$ReventlessLocal.Make(Bus);
2046
+ let InboundTranslationSliceMaker = InboundTranslationSlice_Builder$ReventlessLocal.Make(Bus);
2047
+ let Make$1 = Spec => (Behavior => (EventMappings => {
2048
+ let $$let = AggregateMaker.Make(Spec)(Behavior)(EventMappings);
2049
+ return {
2050
+ Spec: $$let.Spec,
2051
+ make: $$let.make,
2052
+ outputs: $$let.outputs,
2053
+ operations: $$let.operations,
2054
+ finish: $$let.finish
2055
+ };
2056
+ }));
2057
+ let MakeAsync = Spec => (Behavior => (EventMappings => {
2058
+ let $$let = AggregateMaker.Make(Spec)(Behavior)(EventMappings);
2059
+ return {
2060
+ Spec: $$let.Spec,
2061
+ make: $$let.make,
2062
+ outputs: $$let.outputs,
2063
+ operations: $$let.operations,
2064
+ finish: $$let.finish
2065
+ };
2066
+ }));
2067
+ let Aggregate = {
2068
+ Make: Make$1,
2069
+ MakeAsync: MakeAsync
2070
+ };
2071
+ let Make$2 = Spec => (Mappings => {
2072
+ let $$let = ReadModelMaker.Make(Spec)(Mappings);
2073
+ return {
2074
+ Spec: $$let.Spec,
2075
+ sourceNames: $$let.sourceNames,
2076
+ make: $$let.make,
2077
+ outputs: $$let.outputs,
2078
+ operations: $$let.operations,
2079
+ finish: $$let.finish
2080
+ };
2081
+ });
2082
+ let ReadModel = {
2083
+ Make: Make$2
2084
+ };
2085
+ let Make$3 = Spec => (Mappings => {
2086
+ let $$let = ReadModelMaker.Make(Spec)(Mappings);
2087
+ return {
2088
+ Spec: $$let.Spec,
2089
+ sourceNames: $$let.sourceNames,
2090
+ make: $$let.make,
2091
+ outputs: $$let.outputs,
2092
+ operations: $$let.operations,
2093
+ finish: $$let.finish
2094
+ };
2095
+ });
2096
+ let ReadModelStream = {
2097
+ Make: Make$3
2098
+ };
2099
+ let Make$4 = Mapping => {
2100
+ let CompiledMapping = ExtensionPointMapping$ReventlessInfra.Make(Mapping);
2101
+ let name = Mapping.Delegate.name;
2102
+ let mappings = [CompiledMapping];
2103
+ return ExtensionPointMaker.Make(Mapping.ExtensionPoint)({
2104
+ name: name,
2105
+ moduleUrl: Mapping.moduleUrl,
2106
+ mappings: mappings
2107
+ });
2108
+ };
2109
+ let Make2 = Mapping1 => (Mapping2 => {
2110
+ let CM1 = ExtensionPointMapping$ReventlessInfra.Make(Mapping1);
2111
+ let CM2 = ExtensionPointMapping$ReventlessInfra.Make(Mapping2);
2112
+ let name = Mapping1.Delegate.name + "+" + Mapping2.Delegate.name;
2113
+ let mappings = [
2114
+ CM1,
2115
+ CM2
2116
+ ];
2117
+ return ExtensionPointMaker.Make(Mapping1.ExtensionPoint)({
2118
+ name: name,
2119
+ moduleUrl: Mapping1.moduleUrl,
2120
+ mappings: mappings
2121
+ });
2122
+ });
2123
+ let Make3 = Mapping1 => (Mapping2 => (Mapping3 => {
2124
+ let CM1 = ExtensionPointMapping$ReventlessInfra.Make(Mapping1);
2125
+ let CM2 = ExtensionPointMapping$ReventlessInfra.Make(Mapping2);
2126
+ let CM3 = ExtensionPointMapping$ReventlessInfra.Make(Mapping3);
2127
+ let name = Mapping1.Delegate.name + "+" + Mapping2.Delegate.name + "+" + Mapping3.Delegate.name;
2128
+ let mappings = [
2129
+ CM1,
2130
+ CM2,
2131
+ CM3
2132
+ ];
2133
+ return ExtensionPointMaker.Make(Mapping1.ExtensionPoint)({
2134
+ name: name,
2135
+ moduleUrl: Mapping1.moduleUrl,
2136
+ mappings: mappings
2137
+ });
2138
+ }));
2139
+ let MakeMulti = Spec => (Mappings => ExtensionPointMaker.Make(Spec)(Mappings));
2140
+ let ExtensionPoint = {
2141
+ Make: Make$4,
2142
+ Make2: Make2,
2143
+ Make3: Make3,
2144
+ MakeMulti: MakeMulti
2145
+ };
2146
+ let Make$5 = Mapping => {
2147
+ let CompiledMapping = ExtensionMapping$ReventlessInfra.Make(Mapping);
2148
+ let name = Mapping.Delegate.name;
2149
+ let mappings = [CompiledMapping];
2150
+ return {
2151
+ Spec: Mapping.ExtensionPoint,
2152
+ name: name,
2153
+ moduleUrl: Mapping.moduleUrl,
2154
+ delegateModuleUrl: Mapping.delegateModuleUrl,
2155
+ mappings: mappings
2156
+ };
2157
+ };
2158
+ let Extension = {
2159
+ Make: Make$5
2160
+ };
2161
+ let Make$6 = Spec => TaskMaker.Make(Spec);
2162
+ let Task = {
2163
+ Make: Make$6
2164
+ };
2165
+ let Counter = Counter_Builder$ReventlessLocal.Make(Bus);
2166
+ let Make$7 = Spec => (Behavior => {
2167
+ let $$let = StateChangeSlice_Builder$ReventlessLocal.Make(Spec)(Behavior);
2168
+ return {
2169
+ Spec: $$let.Spec,
2170
+ Behavior: $$let.Behavior,
2171
+ isAsync: $$let.isAsync,
2172
+ make: $$let.make
2173
+ };
2174
+ });
2175
+ let MakeAsync$1 = Spec => (Behavior => {
2176
+ let include = StateChangeSlice_Builder$ReventlessLocal.Make(Spec)(Behavior);
2177
+ return {
2178
+ Spec: include.Spec,
2179
+ Behavior: include.Behavior,
2180
+ isAsync: true,
2181
+ make: include.make
2182
+ };
2183
+ });
2184
+ let StateChangeSlice = {
2185
+ Make: Make$7,
2186
+ MakeAsync: MakeAsync$1
2187
+ };
2188
+ let Make$8 = Spec => (Projection => {
2189
+ let $$let = StateViewSliceMaker.Make(Spec)(Projection);
2190
+ return {
2191
+ Spec: $$let.Spec,
2192
+ Projection: $$let.Projection,
2193
+ make: $$let.make
2194
+ };
2195
+ });
2196
+ let StateViewSlice = {
2197
+ Make: Make$8
2198
+ };
2199
+ let Make$9 = Spec => (Projection => {
2200
+ let $$let = StateViewSliceMaker.Make(Spec)(Projection);
2201
+ return {
2202
+ Spec: $$let.Spec,
2203
+ Projection: $$let.Projection,
2204
+ make: $$let.make
2205
+ };
2206
+ });
2207
+ let StateViewSliceStream = {
2208
+ Make: Make$9
2209
+ };
2210
+ let Make$10 = Spec => (Automation => AutomationSliceMaker.Make(Spec)(Automation));
2211
+ let AutomationSlice = {
2212
+ Make: Make$10
2213
+ };
2214
+ let Make$11 = Spec => (Translation => {
2215
+ let $$let = OutboundTranslationSliceMaker.Make(Spec)(Translation);
2216
+ return {
2217
+ Spec: $$let.Spec,
2218
+ Translation: $$let.Translation,
2219
+ queryDbName: $$let.queryDbName,
2220
+ make: $$let.make
2221
+ };
2222
+ });
2223
+ let OutboundTranslationSlice = {
2224
+ Make: Make$11
2225
+ };
2226
+ let Make$12 = Spec => (Translation => {
2227
+ let $$let = InboundTranslationSliceMaker.Make(Spec)(Translation);
2228
+ return {
2229
+ Spec: $$let.Spec,
2230
+ Translation: $$let.Translation,
2231
+ queryDbName: $$let.queryDbName,
2232
+ make: $$let.make
2233
+ };
2234
+ });
2235
+ let InboundTranslationSlice = {
2236
+ Make: Make$12
2237
+ };
2238
+ let emptyBaseFragment = GraphQL_Stitcher$ReventlessCore.encode({
2239
+ types: [],
2240
+ mutations: [],
2241
+ queries: [],
2242
+ subscriptions: []
2243
+ });
2244
+ let Make$13 = FragmentConfig => {
2245
+ let Builder = Api_Builder$ReventlessCore.Make(LocalGraphQL_Adapter$ReventlessLocal);
2246
+ let make = (name, opts) => Builder.make(name, emptyBaseFragment, opts);
2247
+ return {
2248
+ make: make
2249
+ };
2250
+ };
2251
+ let Api = {
2252
+ Make: Make$13
2253
+ };
2254
+ let PluginMaker = Plugin_Builder$ReventlessLocal.Make(Bus)({
2255
+ hooks: hooks
2256
+ });
2257
+ let Plugin_make = PluginMaker.make;
2258
+ let Plugin_makeAutoUIManifest = PluginMaker.makeAutoUIManifest;
2259
+ let Plugin_makePluginDefinition = PluginMaker.makePluginDefinition;
2260
+ let Plugin = {
2261
+ make: Plugin_make,
2262
+ makeAutoUIManifest: Plugin_makeAutoUIManifest,
2263
+ makePluginDefinition: Plugin_makePluginDefinition
2264
+ };
2265
+ let EventCollectorChannel = LocalEventCollectorChannel$ReventlessLocal.Make(Bus);
2266
+ let QE = LocalQueryEngine$ReventlessLocal.Make(Bus);
2267
+ let $$let = AggregateMaker.Make({
2268
+ Id: Id$Reventless.$$String,
2269
+ name: PluginSpec$ReventlessCore.name,
2270
+ eventSchema: PluginSpec$ReventlessCore.eventSchema,
2271
+ errorSchema: PluginSpec$ReventlessCore.errorSchema,
2272
+ commandSchema: PluginSpec$ReventlessCore.commandSchema,
2273
+ moduleUrl: PluginSpec$ReventlessCore.moduleUrl,
2274
+ commandAuthorization: PluginSpec$ReventlessCore.commandAuthorization
2275
+ })({
2276
+ initialState: PluginBehavior$ReventlessCore.initialState,
2277
+ evolve: PluginBehavior$ReventlessCore.evolve,
2278
+ decide: PluginBehavior$ReventlessCore.decide,
2279
+ moduleUrl: PluginBehavior$ReventlessCore.moduleUrl
2280
+ })(NoEventMappings$ReventlessInfra.Make({
2281
+ name: PluginSpec$ReventlessCore.name,
2282
+ Id: Id$Reventless.$$String,
2283
+ commandSchema: PluginSpec$ReventlessCore.commandSchema
2284
+ }));
2285
+ let LocalPluginAggregate_Spec = $$let.Spec;
2286
+ let LocalPluginAggregate_make = $$let.make;
2287
+ let LocalPluginAggregate_outputs = $$let.outputs;
2288
+ let LocalPluginAggregate_operations = $$let.operations;
2289
+ let LocalPluginAggregate_finish = $$let.finish;
2290
+ let LocalPluginAggregate = {
2291
+ Spec: LocalPluginAggregate_Spec,
2292
+ make: LocalPluginAggregate_make,
2293
+ outputs: LocalPluginAggregate_outputs,
2294
+ operations: LocalPluginAggregate_operations,
2295
+ finish: LocalPluginAggregate_finish
2296
+ };
2297
+ let PluginsReadModelMappings = {
2298
+ moduleUrl: PluginsProjection$ReventlessCore.moduleUrl,
2299
+ mappings: PluginsProjection$ReventlessCore.mappings
2300
+ };
2301
+ let PluginsReadModel = ReadModelMaker.MakeNoResolver({
2302
+ Id: Id$Reventless.$$String,
2303
+ name: PluginsReadModelSpec$ReventlessCore.name,
2304
+ moduleUrl: PluginsReadModelSpec$ReventlessCore.moduleUrl,
2305
+ stateSchema: PluginsReadModelSpec$ReventlessCore.stateSchema,
2306
+ config: PluginsReadModelSpec$ReventlessCore.config,
2307
+ subIdConfig: undefined,
2308
+ authorization: PluginsReadModelSpec$ReventlessCore.authorization,
2309
+ visibility: PluginsReadModelSpec$ReventlessCore.visibility
2310
+ })(PluginsReadModelMappings);
2311
+ let $$let$1 = LocalCommandTopicChannel$ReventlessLocal.Make(Bus);
2312
+ let $$let$2 = LocalCommandTopicChannel$ReventlessLocal.Make(Bus);
2313
+ let Admin = Platform_Admin$ReventlessCore.Make({
2314
+ make: LocalRuntimeEnvironment$ReventlessLocal.make,
2315
+ groupBySource: LocalRuntimeEnvironment$ReventlessLocal.groupBySource,
2316
+ extractCorrelationId: LocalRuntimeEnvironment$ReventlessLocal.extractCorrelationId,
2317
+ asEventHandler: prim => prim,
2318
+ asEffectHandler: prim => prim
2319
+ })(EventCollectorChannel)({
2320
+ make: QE.make
2321
+ })(LocalClonerRunner$ReventlessLocal)(PluginRuntime_Builder_Micro$ReventlessCore.Make({
2322
+ make: LocalRuntimeEnvironment$ReventlessLocal.make,
2323
+ groupBySource: LocalRuntimeEnvironment$ReventlessLocal.groupBySource,
2324
+ extractCorrelationId: LocalRuntimeEnvironment$ReventlessLocal.extractCorrelationId,
2325
+ asEventHandler: prim => prim,
2326
+ asEffectHandler: prim => prim
2327
+ })(EventCollectorChannel))(DcbEventLogStorage_InMemory$ReventlessLocal.Make(Bus))(LocalEventTopicPublisher$ReventlessLocal.Make(Bus))({
2328
+ make: $$let$1.make
2329
+ })({
2330
+ make: $$let$2.make
2331
+ })({
2332
+ silent: false,
2333
+ splitApi: true,
2334
+ cloner: false,
2335
+ hooks: hooks
2336
+ });
2337
+ let makeScheduler = () => {
2338
+ let SP = LocalScheduledPublisher$ReventlessLocal.Make(Bus);
2339
+ let S = Scheduler_Builder$ReventlessCore.Make({
2340
+ make: SP.make
2341
+ });
2342
+ return Component$ReventlessCore.operations(S.make(undefined));
2343
+ };
2344
+ let graphqlDebug = Stdlib_Option.isSome(process.env["GRAPHQL_DEBUG"]);
2345
+ let resolvePort = (key, fallback) => Stdlib_Option.getOr(Stdlib_Option.flatMap(process.env[key], v => Stdlib_Int.fromString(v, undefined)), fallback);
2346
+ let domainPort = resolvePort("REVENTLESS_DOMAIN_PORT", 4000);
2347
+ let domainMcpPort = resolvePort("REVENTLESS_DOMAIN_MCP_PORT", 3001);
2348
+ let platformPort = resolvePort("REVENTLESS_PLATFORM_PORT", 4001);
2349
+ let platformMcpPort = resolvePort("REVENTLESS_PLATFORM_MCP_PORT", 3002);
2350
+ let uiFragmentQueryDbOpsRef = {
2351
+ contents: undefined
2352
+ };
2353
+ let ensureUIFragmentRegistryQueryDbStore = () => {
2354
+ let ops = uiFragmentQueryDbOpsRef.contents;
2355
+ if (ops !== undefined) {
2356
+ return ops;
2357
+ }
2358
+ let store = {
2359
+ contents: {}
2360
+ };
2361
+ let allItems = {
2362
+ contents: []
2363
+ };
2364
+ let syncAll = () => {
2365
+ allItems.contents = Object.entries(store.contents).flatMap(param => {
2366
+ let id = param[0];
2367
+ return param[1].map(item => {
2368
+ let obj = Stdlib_Option.getOr(Stdlib_JSON.Decode.object(item), {});
2369
+ if (Stdlib_Option.isSome(obj["id"])) {
2370
+ return item;
2371
+ }
2372
+ let copy = {};
2373
+ Object.entries(obj).forEach(param => {
2374
+ copy[param[0]] = param[1];
2375
+ });
2376
+ copy["id"] = id;
2377
+ return copy;
2378
+ });
2379
+ });
2380
+ };
2381
+ let ops_load = async id => ({
2382
+ TAG: "Ok",
2383
+ _0: Stdlib_Option.getOr(store.contents[id], [])
2384
+ });
2385
+ let ops_loadStream = id => Stream$1.fromIterable(Stdlib_Option.getOr(store.contents[id], []));
2386
+ let ops_save = async (id, state, param, param$1) => {
2387
+ store.contents[id] = [state];
2388
+ syncAll();
2389
+ return {
2390
+ TAG: "Ok",
2391
+ _0: undefined
2392
+ };
2393
+ };
2394
+ let ops_saveBatch = async batch => {
2395
+ batch.forEach(param => {
2396
+ store.contents[param[0]] = [param[1]];
2397
+ });
2398
+ syncAll();
2399
+ return {
2400
+ TAG: "Ok",
2401
+ _0: undefined
2402
+ };
2403
+ };
2404
+ let ops_count = async (param, param$1, inc) => ({
2405
+ TAG: "Ok",
2406
+ _0: inc
2407
+ });
2408
+ let ops_delete = async (id, param) => {
2409
+ Stdlib_Dict.$$delete(store.contents, id);
2410
+ syncAll();
2411
+ return {
2412
+ TAG: "Ok",
2413
+ _0: undefined
2414
+ };
2415
+ };
2416
+ let ops_deleteBatch = async ids => {
2417
+ ids.forEach(param => Stdlib_Dict.$$delete(store.contents, param[0]));
2418
+ syncAll();
2419
+ return {
2420
+ TAG: "Ok",
2421
+ _0: undefined
2422
+ };
2423
+ };
2424
+ let ops$1 = {
2425
+ load: ops_load,
2426
+ loadStream: ops_loadStream,
2427
+ save: ops_save,
2428
+ saveBatch: ops_saveBatch,
2429
+ count: ops_count,
2430
+ delete: ops_delete,
2431
+ deleteBatch: ops_deleteBatch
2432
+ };
2433
+ Bus.registerQueryDb(UIFragmentRegistryReadModelSpec$ReventlessCore.name, ops$1);
2434
+ Bus.registerQueryDbScan(UIFragmentRegistryReadModelSpec$ReventlessCore.name, () => allItems.contents);
2435
+ Bus.registerQueryDbStream(UIFragmentRegistryReadModelSpec$ReventlessCore.name, () => Stream$1.fromIterable(allItems.contents));
2436
+ uiFragmentQueryDbOpsRef.contents = ops$1;
2437
+ return ops$1;
2438
+ };
2439
+ let pluginStructuresStore = {
2440
+ contents: {}
2441
+ };
2442
+ let seedPluginStructuresStore = pluginComponents => {
2443
+ pluginComponents.forEach(plugin => {
2444
+ let outputs = Component$ReventlessCore.outputs(plugin);
2445
+ Pulumi.all([
2446
+ outputs.id,
2447
+ outputs.pluginStructure
2448
+ ]).apply(param => {
2449
+ let ps = param[1];
2450
+ if (ps !== undefined) {
2451
+ pluginStructuresStore.contents[param[0]] = ps;
2452
+ return;
2453
+ }
2454
+ });
2455
+ });
2456
+ };
2457
+ let pluginCmdTopicKey = PluginSpec$ReventlessCore.name + "AggrCmdTopic";
2458
+ let pluginEventTopicKey = PluginSpec$ReventlessCore.name + "AggrEventTopic";
2459
+ let dispatchPluginCommand = (pluginName, command) => {
2460
+ let cmdJson_meta = Message$ReventlessCore.generateMeta(PluginSpec$ReventlessCore.name, undefined, undefined, undefined, undefined, undefined, undefined, undefined);
2461
+ let cmdJson_commandJson = S.reverseConvertToJsonOrThrow(command, PluginSpec$ReventlessCore.commandSchema);
2462
+ let cmdJson = {
2463
+ id: pluginName,
2464
+ meta: cmdJson_meta,
2465
+ commandJson: cmdJson_commandJson
2466
+ };
2467
+ return Bus.dispatchCommand(pluginCmdTopicKey, CommandTopic$ReventlessCore.encodeCommandJson(cmdJson));
2468
+ };
2469
+ let pluginStatusSubTopic = "onPluginStatusChange";
2470
+ let uiFragmentSubTopic = "onUIFragmentChange";
2471
+ let pluginEventsSubscribed = {
2472
+ contents: false
2473
+ };
2474
+ let subscribeToPluginEvents = () => {
2475
+ if (pluginEventsSubscribed.contents) {
2476
+ return;
2477
+ }
2478
+ pluginEventsSubscribed.contents = true;
2479
+ let publishStatus = (name, status) => LocalGraphQL_SubscriptionResolvers$ReventlessLocal.publish(pluginStatusSubTopic, Object.fromEntries([
2480
+ [
2481
+ "pluginId",
2482
+ name
2483
+ ],
2484
+ [
2485
+ "status",
2486
+ status
2487
+ ]
2488
+ ]));
2489
+ let publishUIFragment = (name, changeKind, manifest) => LocalGraphQL_SubscriptionResolvers$ReventlessLocal.publish(uiFragmentSubTopic, Object.fromEntries([
2490
+ [
2491
+ "pluginId",
2492
+ name
2493
+ ],
2494
+ [
2495
+ "changeKind",
2496
+ changeKind
2497
+ ],
2498
+ [
2499
+ "manifest",
2500
+ manifest
2501
+ ]
2502
+ ]));
2503
+ Bus.subscribeToEvents(pluginEventTopicKey, async (_service, _meta, eventJson) => {
2504
+ let def;
2505
+ try {
2506
+ def = S.convertOrThrow(eventJson, PluginSpec$ReventlessCore.eventSchema);
2507
+ } catch (exn) {
2508
+ return;
2509
+ }
2510
+ switch (def.TAG) {
2511
+ case "VersionDisconnected" :
2512
+ return publishStatus(def._0.name, "Disconnected");
2513
+ case "VersionDeactivated" :
2514
+ return publishStatus(def._0.name, "Inactive");
2515
+ case "VersionRetired" :
2516
+ return publishStatus(def._0.name, "Retired");
2517
+ case "VersionDetected" :
2518
+ case "VersionSuperseded" :
2519
+ case "IncompatiblePluginDetected" :
2520
+ return;
2521
+ case "UIFragmentRegistered" :
2522
+ let data = def._0;
2523
+ return publishUIFragment(Plugin$ReventlessCore.name(data.pluginId), "Registered", S.reverseConvertToJsonOrThrow(data.manifest, Plugin$Reventless.uiFragmentManifestSchema));
2524
+ case "UIFragmentUpdated" :
2525
+ let data$1 = def._0;
2526
+ return publishUIFragment(Plugin$ReventlessCore.name(data$1.pluginId), "Updated", S.reverseConvertToJsonOrThrow(data$1.newManifest, Plugin$Reventless.uiFragmentManifestSchema));
2527
+ case "UIFragmentDeregistered" :
2528
+ return publishUIFragment(Plugin$ReventlessCore.name(def._0.pluginId), "Deregistered", null);
2529
+ default:
2530
+ return publishStatus(def._0.name, "Connected");
2531
+ }
2532
+ });
2533
+ };
2534
+ let connectPlugin = pluginComponents => {
2535
+ pluginComponents.forEach(plugin => {
2536
+ let outputs = Component$ReventlessCore.outputs(plugin);
2537
+ Pulumi.all([
2538
+ outputs.id,
2539
+ outputs.version,
2540
+ outputs.eventCollector,
2541
+ outputs.extensionPoints,
2542
+ outputs.extensions,
2543
+ outputs.apiSchemaFragment,
2544
+ outputs.uiFragments,
2545
+ outputs.pluginStructure
2546
+ ]).apply(param => {
2547
+ let id = param[0];
2548
+ let pluginName = Stdlib_Option.getOr(id.split("@")[0], id);
2549
+ let pluginDefinition = {
2550
+ id: id,
2551
+ name: pluginName,
2552
+ version: param[1],
2553
+ extensionPoints: Object.entries(param[3]).map(param => {
2554
+ let epName = param[0];
2555
+ return {
2556
+ name: epName,
2557
+ commandTopic: epName,
2558
+ eventTopic: param[1].name
2559
+ };
2560
+ }),
2561
+ extensions: Object.entries(param[4]).map(param => {
2562
+ let ext = param[1];
2563
+ return {
2564
+ name: ext.name,
2565
+ extensionPointName: ext.extensionPointName,
2566
+ dcbSources: []
2567
+ };
2568
+ }),
2569
+ eventCollector: param[2].name,
2570
+ extensionProtocols: [],
2571
+ apiSchemaFragment: param[5],
2572
+ apiTarget: undefined,
2573
+ uiFragments: param[6],
2574
+ structure: param[7],
2575
+ dcbEventLog: undefined
2576
+ };
2577
+ dispatchPluginCommand(pluginName, {
2578
+ TAG: "Connect",
2579
+ _0: pluginDefinition
2580
+ });
2581
+ });
2582
+ });
2583
+ };
2584
+ let seedUIFragmentRegistryQueryDb = pluginComponents => {
2585
+ let uiFragmentOps = ensureUIFragmentRegistryQueryDbStore();
2586
+ pluginComponents.forEach(plugin => {
2587
+ let outputs = Component$ReventlessCore.outputs(plugin);
2588
+ Pulumi.all([
2589
+ outputs.id,
2590
+ outputs.uiFragments
2591
+ ]).apply(param => {
2592
+ let uiFragments = param[1];
2593
+ if (uiFragments === undefined) {
2594
+ return;
2595
+ }
2596
+ let id = param[0];
2597
+ let state_remoteEntryUrl = uiFragments.remoteEntryUrl;
2598
+ let state_panels = uiFragments.panels;
2599
+ let state_pages = uiFragments.pages;
2600
+ let state_registeredAt = new Date().toISOString();
2601
+ let state_updatedAt = new Date().toISOString();
2602
+ let state = {
2603
+ pluginId: id,
2604
+ remoteEntryUrl: state_remoteEntryUrl,
2605
+ panels: state_panels,
2606
+ pages: state_pages,
2607
+ registeredAt: state_registeredAt,
2608
+ updatedAt: state_updatedAt
2609
+ };
2610
+ let entry = S.reverseConvertToJsonOrThrow(state, UIFragmentRegistryReadModelSpec$ReventlessCore.stateSchema);
2611
+ uiFragmentOps.save(id, entry, "Any", undefined);
2612
+ });
2613
+ });
2614
+ };
2615
+ let extractExtensionWirings = (pluginName, pluginVersion, pluginOutputs) => pluginOutputs.extensions.apply(exts => Object.values(exts).map(ext => {
2616
+ let providerPlugin = ext.extensionPointName.split(".")[0];
2617
+ return {
2618
+ extensionName: ext.name,
2619
+ extensionPointName: ext.extensionPointName,
2620
+ providerPlugin: providerPlugin,
2621
+ providerVersion: "",
2622
+ subscriberPlugin: pluginName,
2623
+ subscriberVersion: pluginVersion
2624
+ };
2625
+ }));
2626
+ let firePluginDeployedHooks = (builtInfos, pluginOutputs) => {
2627
+ let environment = Pulumi.getStack();
2628
+ builtInfos.forEach((info, i) => {
2629
+ let hook = Plugin_Helpers$ReventlessCore.onPluginDeployedHook.contents;
2630
+ if (hook === undefined) {
2631
+ return;
2632
+ }
2633
+ let outputs = Stdlib_Option.flatMap(pluginOutputs, arr => arr[i]);
2634
+ let wiringsOutput = outputs !== undefined ? extractExtensionWirings(info.name, info.version, outputs) : Pulumi.output([]);
2635
+ wiringsOutput.apply(wirings => {
2636
+ let deployedInfo_name = info.name;
2637
+ let deployedInfo_version = info.version;
2638
+ let deployedInfo_deployedAt = new Date().toISOString();
2639
+ let deployedInfo_deploymentId = new Date().toISOString();
2640
+ let deployedInfo_kind = info.kind;
2641
+ let deployedInfo_displayName = info.displayName;
2642
+ let deployedInfo_vendor = info.vendor;
2643
+ let deployedInfo_architectureType = info.architectureType;
2644
+ let deployedInfo_components = info.components.map(c => ({
2645
+ name: c.name,
2646
+ kind: c.kind,
2647
+ schema: c.schema,
2648
+ resources: [],
2649
+ subComponents: []
2650
+ }));
2651
+ let deployedInfo = {
2652
+ name: deployedInfo_name,
2653
+ version: deployedInfo_version,
2654
+ environment: environment,
2655
+ stackName: environment,
2656
+ deployedAt: deployedInfo_deployedAt,
2657
+ actor: "local",
2658
+ deploymentId: deployedInfo_deploymentId,
2659
+ kind: deployedInfo_kind,
2660
+ displayName: deployedInfo_displayName,
2661
+ vendor: deployedInfo_vendor,
2662
+ architectureType: deployedInfo_architectureType,
2663
+ components: deployedInfo_components,
2664
+ extensionWirings: wirings
2665
+ };
2666
+ hook(deployedInfo);
2667
+ });
2668
+ });
2669
+ };
2670
+ let startServers = () => {
2671
+ UserStore$ReventlessLocal.autoLoadOnce();
2672
+ DomainGraphQL_Server$ReventlessLocal.start(domainPort, undefined, undefined);
2673
+ DomainMCP_Server$ReventlessLocal.start(domainMcpPort, undefined);
2674
+ PlatformGraphQL_Server$ReventlessLocal.start(platformPort, Auth_GraphqlContext$ReventlessLocal.buildAuthContext, undefined);
2675
+ PlatformMCP_Server$ReventlessLocal.start(platformMcpPort, undefined);
2676
+ if (graphqlDebug) {
2677
+ DomainGraphQL_Server$ReventlessLocal.printDiagnostics();
2678
+ DomainMCP_Server$ReventlessLocal.printDiagnostics();
2679
+ PlatformGraphQL_Server$ReventlessLocal.printDiagnostics();
2680
+ PlatformMCP_Server$ReventlessLocal.printDiagnostics();
2681
+ }
2682
+ Plugin_Helpers$ReventlessCore.firePlatformDeployedHook({
2683
+ name: "local",
2684
+ environment: Pulumi.getStack(),
2685
+ region: "local",
2686
+ domainApiEndpoint: "http://localhost:4000/graphql",
2687
+ domainApiRoleArn: "local",
2688
+ platformApiEndpoint: "http://localhost:4001/graphql",
2689
+ platformApiRoleArn: "local",
2690
+ adminResources: []
2691
+ });
2692
+ };
2693
+ let adminMutationSdl = mutations => mutations.map(field => {
2694
+ let suffix = ": String!";
2695
+ let n = field.length - suffix.length | 0;
2696
+ if (n > 0 && field.endsWith(suffix)) {
2697
+ return field.slice(0, n) + ": CommandResult!";
2698
+ } else {
2699
+ return field;
2700
+ }
2701
+ });
2702
+ let commandAccepted = (msgId, entityId) => Object.fromEntries([
2703
+ [
2704
+ "__typename",
2705
+ "CommandAccepted"
2706
+ ],
2707
+ [
2708
+ "msgId",
2709
+ msgId
2710
+ ],
2711
+ [
2712
+ "entityId",
2713
+ Stdlib_Option.getOr(Stdlib_Option.map(entityId, prim => prim), null)
2714
+ ],
2715
+ [
2716
+ "eventCount",
2717
+ 0
2718
+ ]
2719
+ ]);
2720
+ let connectionResponse = items => {
2721
+ let edges = items.map((item, i) => Object.fromEntries([
2722
+ [
2723
+ "node",
2724
+ item
2725
+ ],
2726
+ [
2727
+ "cursor",
2728
+ i.toString()
2729
+ ]
2730
+ ]));
2731
+ let hasItems = edges.length !== 0;
2732
+ return Object.fromEntries([
2733
+ [
2734
+ "edges",
2735
+ edges
2736
+ ],
2737
+ [
2738
+ "pageInfo",
2739
+ Object.fromEntries([
2740
+ [
2741
+ "hasNextPage",
2742
+ false
2743
+ ],
2744
+ [
2745
+ "hasPreviousPage",
2746
+ false
2747
+ ],
2748
+ [
2749
+ "startCursor",
2750
+ hasItems ? "0" : null
2751
+ ],
2752
+ [
2753
+ "endCursor",
2754
+ hasItems ? (edges.length - 1 | 0).toString() : null
2755
+ ]
2756
+ ])
2757
+ ]
2758
+ ]);
2759
+ };
2760
+ let registerAdminItemsAndIndexResolvers = (queryResolvers, live) => {
2761
+ PluginBaseFragment$ReventlessCore.queryEntries.forEach(entry => {
2762
+ let queryDbName = Stdlib_Option.getOr(entry.specName, entry.returnTypeName);
2763
+ let match = entry.subIdField;
2764
+ if (match !== undefined) {
2765
+ queryResolvers[entry.singleFieldName + "Items"] = async (_root, args, _ctx) => {
2766
+ if (!live) {
2767
+ return connectionResponse([]);
2768
+ }
2769
+ let id = Stdlib_Option.getOr(Stdlib_Option.flatMap(Stdlib_Option.flatMap(Stdlib_JSON.Decode.object(args), d => d["id"]), Stdlib_JSON.Decode.string), "");
2770
+ let ops = Bus.getQueryDb(queryDbName);
2771
+ return connectionResponse(ops !== undefined ? await Effect.runPromise(Effect.catchAll(Stream.runCollect(ops.loadStream(id)), param => Effect.succeed([]))) : []);
2772
+ };
2773
+ }
2774
+ let indexes = entry.indexQueries;
2775
+ if (indexes !== undefined) {
2776
+ indexes.forEach(ic => {
2777
+ let stripped = ic.index.startsWith("by") && ic.index.length > 2 ? ic.index.slice(2, ic.index.length) : ic.index;
2778
+ let fieldName = entry.singleFieldName + "By" + Stdlib_String.capitalize(stripped);
2779
+ queryResolvers[fieldName] = async (_root, _args, _ctx) => connectionResponse([]);
2780
+ });
2781
+ return;
2782
+ }
2783
+ });
2784
+ };
2785
+ let makePlatform = (version, plugins) => {
2786
+ log.info("Platform", undefined, `v` + version);
2787
+ log.info("Platform", undefined, `silent: ` + Stdlib_Bool.toString(false) + `, splitApi: ` + Stdlib_Bool.toString(true) + `, cloner: ` + Stdlib_Bool.toString(false));
2788
+ let tmp;
2789
+ tmp = typeof backend !== "object" ? "backend: memory" : `backend: sqlite (` + backend.path + (
2790
+ backend.resetOnStart ? ", resetOnStart" : ""
2791
+ ) + `)`;
2792
+ log.info("Platform", undefined, tmp);
2793
+ let scheduler = makeScheduler();
2794
+ hooks_scheduler.contents = scheduler;
2795
+ hooks_api.contents = {
2796
+ val: undefined
2797
+ };
2798
+ hooks_apiRole.contents = {
2799
+ val: undefined
2800
+ };
2801
+ let admin = Admin.construct(version, [], [LocalPluginAggregate], [{
2802
+ Spec: PluginsReadModel.Spec,
2803
+ sourceNames: PluginsReadModel.sourceNames,
2804
+ make: PluginsReadModel.make,
2805
+ outputs: PluginsReadModel.outputs,
2806
+ operations: PluginsReadModel.operations,
2807
+ finish: PluginsReadModel.finish
2808
+ }], scheduler, LocalPluginSpec$ReventlessLocal.resourceNaming, undefined, undefined, [], [], [], [], []);
2809
+ hooks_adminExtensionPoints.contents = admin.extensionPointsOutputs.apply(eps => Object.fromEntries(eps.map(ep => [
2810
+ ep.name,
2811
+ ep
2812
+ ])));
2813
+ let environment = Pulumi.getStack();
2814
+ let existingBuiltHook = Plugin_Helpers$ReventlessCore.onPluginBuiltHook.contents;
2815
+ let builtInfos = {
2816
+ contents: []
2817
+ };
2818
+ Plugin_Helpers$ReventlessCore.registerOnPluginBuilt(info => {
2819
+ Stdlib_Option.forEach(existingBuiltHook, h => h(info));
2820
+ builtInfos.contents.push(info);
2821
+ });
2822
+ let plugins$1 = plugins.map(plugin => plugin.make());
2823
+ Plugin_Helpers$ReventlessCore.onPluginBuiltHook.contents = existingBuiltHook;
2824
+ let allPluginOutputs = plugins$1.map(Component$ReventlessCore.outputs);
2825
+ firePluginDeployedHooks(builtInfos.contents, allPluginOutputs);
2826
+ plugins$1.forEach(plugin => {
2827
+ let outputs = Component$ReventlessCore.outputs(plugin);
2828
+ Pulumi.all([
2829
+ outputs.eventCollector,
2830
+ outputs.extensions
2831
+ ]).apply(param => {
2832
+ let eventCollector = param[0];
2833
+ Object.entries(param[1]).forEach(param => {
2834
+ let epTopicKey = param[1].extensionPointName.replace(".", "") + "ExtPointEventTopic";
2835
+ Bus.subscribeEventCollectorToTopic(eventCollector.name, epTopicKey);
2836
+ });
2837
+ });
2838
+ });
2839
+ Plugin_Helpers$ReventlessCore.firePlatformDeployedHook({
2840
+ name: "local",
2841
+ environment: environment,
2842
+ region: "local",
2843
+ domainApiEndpoint: "http://localhost:4000/graphql",
2844
+ domainApiRoleArn: "local",
2845
+ platformApiEndpoint: "http://localhost:4000/graphql",
2846
+ platformApiRoleArn: "local",
2847
+ adminResources: []
2848
+ });
2849
+ subscribeToPluginEvents();
2850
+ connectPlugin(plugins$1);
2851
+ seedUIFragmentRegistryQueryDb(plugins$1);
2852
+ seedPluginStructuresStore(plugins$1);
2853
+ pluginStructuresStore.contents[Platform_Admin_Structure$ReventlessCore.pluginId] = Platform_Admin_Structure$ReventlessCore.structure;
2854
+ CommandGeneratorResolvers_GraphQL$ReventlessLocal.setPluginStatusGate(field => {
2855
+ let parts = field.split("_");
2856
+ let pluginPrefix = Stdlib_Option.getOr(parts[0], "");
2857
+ if (pluginPrefix === "Platform") {
2858
+ return;
2859
+ }
2860
+ let statusByName = {};
2861
+ let scanAll = Bus.getQueryDbScan(PluginsReadModelSpec$ReventlessCore.name);
2862
+ if (scanAll !== undefined) {
2863
+ scanAll().forEach(json => {
2864
+ let state;
2865
+ try {
2866
+ state = S.convertOrThrow(json, PluginsReadModelSpec$ReventlessCore.stateSchema);
2867
+ } catch (exn) {
2868
+ return;
2869
+ }
2870
+ statusByName[state.name] = state.status;
2871
+ });
2872
+ }
2873
+ let match = statusByName[pluginPrefix];
2874
+ if (match === undefined) {
2875
+ return;
2876
+ }
2877
+ switch (match) {
2878
+ case "Connected" :
2879
+ return;
2880
+ case "Disconnected" :
2881
+ return [
2882
+ "PluginUnavailable",
2883
+ "plugin is disconnected"
2884
+ ];
2885
+ case "Inactive" :
2886
+ return [
2887
+ "PluginInactive",
2888
+ "plugin is inactive"
2889
+ ];
2890
+ case "Retired" :
2891
+ return [
2892
+ "PluginRetired",
2893
+ "plugin version has been retired"
2894
+ ];
2895
+ }
2896
+ });
2897
+ currentDeployTarget.contents = "Platform";
2898
+ let adminQueryEntry = PluginBaseFragment$ReventlessCore.queryEntries[0];
2899
+ let singleQueryField = adminQueryEntry.singleFieldName;
2900
+ let listQueryField = adminQueryEntry.listFieldName;
2901
+ let adminMutationEntries = AdminApi$ReventlessCore.mutationEntries(false);
2902
+ let adminMutationFieldNames = adminMutationEntries.flatMap(entry => entry.fieldNames);
2903
+ let platformGraphQL = resolveTargetGraphQL();
2904
+ let platformMCP = resolveTargetMCP();
2905
+ let baseParts = GraphQL_Stitcher$ReventlessCore.decode(AdminApi$ReventlessCore.baseFragment(false));
2906
+ platformGraphQL.registerTypes(baseParts.types);
2907
+ let queryResolvers = {};
2908
+ queryResolvers[singleQueryField] = async (_root, args, _ctx) => {
2909
+ let id = Stdlib_Option.getOr(Stdlib_Option.flatMap(Stdlib_Option.flatMap(Stdlib_JSON.Decode.object(args), d => d["id"]), Stdlib_JSON.Decode.string), "");
2910
+ let ops = Bus.getQueryDb(PluginsReadModelSpec$ReventlessCore.name);
2911
+ if (ops === undefined) {
2912
+ return null;
2913
+ }
2914
+ let items = await Effect.runPromise(Effect.catchAll(Stream.runCollect(ops.loadStream(id)), param => Effect.succeed([])));
2915
+ return Stdlib_Option.getOr(items[0], null);
2916
+ };
2917
+ queryResolvers[listQueryField] = async (_root, _args, _ctx) => {
2918
+ let scanAll = Bus.getQueryDbScan(PluginsReadModelSpec$ReventlessCore.name);
2919
+ return connectionResponse(scanAll !== undefined ? scanAll() : []);
2920
+ };
2921
+ queryResolvers["Platform_ComponentDefinitions"] = async (_root, _args, _ctx) => {
2922
+ let dict = {};
2923
+ let scanAll = Bus.getQueryDbScan(PluginsReadModelSpec$ReventlessCore.name);
2924
+ if (scanAll !== undefined) {
2925
+ scanAll().forEach(json => {
2926
+ let state;
2927
+ try {
2928
+ state = S.convertOrThrow(json, PluginsReadModelSpec$ReventlessCore.stateSchema);
2929
+ } catch (exn) {
2930
+ return;
2931
+ }
2932
+ let id = state.name + "@" + state.version;
2933
+ dict[id] = state.status;
2934
+ });
2935
+ }
2936
+ let latestByName = {};
2937
+ Object.entries(pluginStructuresStore.contents).forEach(param => {
2938
+ let def = param[1];
2939
+ let pluginId = param[0];
2940
+ let connected = true;
2941
+ if (pluginId !== Platform_Admin_Structure$ReventlessCore.pluginId) {
2942
+ let match = dict[pluginId];
2943
+ let tmp;
2944
+ tmp = match === "Connected";
2945
+ connected = tmp;
2946
+ }
2947
+ if (!connected) {
2948
+ return;
2949
+ }
2950
+ let name = Plugin$ReventlessCore.name(pluginId);
2951
+ let version = Plugin$ReventlessCore.version(pluginId);
2952
+ let match$1 = latestByName[name];
2953
+ if (match$1 !== undefined && Plugin$ReventlessCore.compareVersions(version, match$1[0]) <= 0) {
2954
+ return;
2955
+ } else {
2956
+ latestByName[name] = [
2957
+ version,
2958
+ [
2959
+ pluginId,
2960
+ def
2961
+ ]
2962
+ ];
2963
+ return;
2964
+ }
2965
+ });
2966
+ return Object.values(latestByName).map(param => {
2967
+ let match = param[1];
2968
+ return Platform_ComponentDefinitionsApi$ReventlessCore.encodePluginStructureEntry(match[0], match[1]);
2969
+ });
2970
+ };
2971
+ queryResolvers["Platform_UIFragments"] = async (_root, _args, _ctx) => {
2972
+ let scanAll = Bus.getQueryDbScan(UIFragmentRegistryReadModelSpec$ReventlessCore.name);
2973
+ let items = scanAll !== undefined ? scanAll() : [];
2974
+ let latestByName = {};
2975
+ items.forEach(item => {
2976
+ let state;
2977
+ try {
2978
+ state = S.parseOrThrow(item, UIFragmentRegistryReadModelSpec$ReventlessCore.stateSchema);
2979
+ } catch (exn) {
2980
+ return;
2981
+ }
2982
+ let name = Plugin$ReventlessCore.name(state.pluginId);
2983
+ let version = Plugin$ReventlessCore.version(state.pluginId);
2984
+ let match = latestByName[name];
2985
+ if (match !== undefined && Plugin$ReventlessCore.compareVersions(version, match[0]) <= 0) {
2986
+ return;
2987
+ } else {
2988
+ latestByName[name] = [
2989
+ version,
2990
+ state
2991
+ ];
2992
+ return;
2993
+ }
2994
+ });
2995
+ return Object.values(latestByName).map(param => Platform_UIFragmentsApi$ReventlessCore.encodeUIFragmentEntry(param[1]));
2996
+ };
2997
+ registerAdminItemsAndIndexResolvers(queryResolvers, true);
2998
+ platformGraphQL.registerQueries(baseParts.queries, queryResolvers);
2999
+ let argId = args => Stdlib_Option.getOr(Stdlib_Option.flatMap(Stdlib_Option.flatMap(Stdlib_JSON.Decode.object(args), d => d["id"]), Stdlib_JSON.Decode.string), "");
3000
+ let currentVersionOf = pluginName => {
3001
+ let scanAll = Bus.getQueryDbScan(PluginsReadModelSpec$ReventlessCore.name);
3002
+ if (scanAll !== undefined) {
3003
+ return Stdlib_Array.findMap(scanAll(), json => {
3004
+ let state;
3005
+ try {
3006
+ state = S.convertOrThrow(json, PluginsReadModelSpec$ReventlessCore.stateSchema);
3007
+ } catch (exn) {
3008
+ return;
3009
+ }
3010
+ if (state.name === pluginName) {
3011
+ return state.version;
3012
+ }
3013
+ });
3014
+ }
3015
+ };
3016
+ let argVersion = args => Stdlib_Option.flatMap(Stdlib_Option.flatMap(Stdlib_JSON.Decode.object(args), d => d["_0"]), Stdlib_JSON.Decode.string);
3017
+ let dispatchLifecycle = (field, args, makeCommand) => {
3018
+ let msgId = Message$ReventlessCore.uuid();
3019
+ let pluginName = argId(args);
3020
+ let v = argVersion(args);
3021
+ let version = v !== undefined && v !== "" ? v : currentVersionOf(pluginName);
3022
+ if (version !== undefined) {
3023
+ log.info("Admin", undefined, field + `(` + pluginName + `@` + version + `): dispatching to aggregate`);
3024
+ dispatchPluginCommand(pluginName, makeCommand(version));
3025
+ } else {
3026
+ log.warn("Admin", undefined, field + `(` + pluginName + `): plugin not found`);
3027
+ }
3028
+ return commandAccepted(msgId, pluginName);
3029
+ };
3030
+ let activateField = Api_Naming$ReventlessCore.adminField("Plugin_Activate");
3031
+ let deactivateField = Api_Naming$ReventlessCore.adminField("Plugin_Deactivate");
3032
+ let retireField = Api_Naming$ReventlessCore.adminField("Plugin_Retire");
3033
+ let mutationResolvers = {};
3034
+ mutationResolvers[activateField] = async (_root, args, _ctx) => dispatchLifecycle(activateField, args, v => ({
3035
+ TAG: "Activate",
3036
+ _0: v
3037
+ }));
3038
+ mutationResolvers[deactivateField] = async (_root, args, _ctx) => dispatchLifecycle(deactivateField, args, v => ({
3039
+ TAG: "Deactivate",
3040
+ _0: v
3041
+ }));
3042
+ mutationResolvers[retireField] = async (_root, args, _ctx) => dispatchLifecycle(retireField, args, v => ({
3043
+ TAG: "Retire",
3044
+ _0: v
3045
+ }));
3046
+ adminMutationFieldNames.forEach(field => {
3047
+ if (Stdlib_Option.isNone(mutationResolvers[field])) {
3048
+ mutationResolvers[field] = async (_root, _args, _ctx) => commandAccepted(Message$ReventlessCore.uuid(), undefined);
3049
+ return;
3050
+ }
3051
+ });
3052
+ let makeUIEvent = (pluginId, changeKind, manifest) => Object.fromEntries([
3053
+ [
3054
+ "pluginId",
3055
+ Plugin$ReventlessCore.name(pluginId)
3056
+ ],
3057
+ [
3058
+ "changeKind",
3059
+ changeKind
3060
+ ],
3061
+ [
3062
+ "manifest",
3063
+ manifest
3064
+ ]
3065
+ ]);
3066
+ let addUIFragmentMutation = (fieldName, changeKind) => {
3067
+ mutationResolvers[fieldName] = async (_root, args, _ctx) => {
3068
+ let obj = Stdlib_Option.getOr(Stdlib_JSON.Decode.object(args), {});
3069
+ let pluginId = Stdlib_Option.getOr(Stdlib_Option.flatMap(obj["pluginId"], Stdlib_JSON.Decode.string), "");
3070
+ let manifest = Stdlib_Option.getOr(obj["manifest"], null);
3071
+ let event = makeUIEvent(pluginId, changeKind, manifest);
3072
+ LocalGraphQL_SubscriptionResolvers$ReventlessLocal.publish(uiFragmentSubTopic, event);
3073
+ return event;
3074
+ };
3075
+ };
3076
+ addUIFragmentMutation(Api_Naming$ReventlessCore.adminField("UIFragmentRegistered"), "Registered");
3077
+ addUIFragmentMutation(Api_Naming$ReventlessCore.adminField("UIFragmentUpdated"), "Updated");
3078
+ addUIFragmentMutation(Api_Naming$ReventlessCore.adminField("UIFragmentDeregistered"), "Deregistered");
3079
+ CommandGeneratorResolvers_GraphQL$ReventlessLocal.ensureCommandResultTypes(platformGraphQL);
3080
+ platformGraphQL.registerMutations(adminMutationSdl(baseParts.mutations), mutationResolvers);
3081
+ adminRegisteredServers.contents.push(platformGraphQL);
3082
+ platformGraphQL.registerSubscriptions([
3083
+ " onUIFragmentChange: UIFragmentChangeEvent",
3084
+ " onPluginStatusChange: PluginStatusChangeEvent"
3085
+ ], Object.fromEntries([
3086
+ [
3087
+ "onUIFragmentChange",
3088
+ LocalGraphQL_SubscriptionResolvers$ReventlessLocal.makeFieldResolver(uiFragmentSubTopic)
3089
+ ],
3090
+ [
3091
+ "onPluginStatusChange",
3092
+ LocalGraphQL_SubscriptionResolvers$ReventlessLocal.makeFieldResolver(pluginStatusSubTopic)
3093
+ ]
3094
+ ]));
3095
+ let adminFieldToQueryDb = Object.fromEntries([
3096
+ [
3097
+ singleQueryField,
3098
+ PluginsReadModelSpec$ReventlessCore.name
3099
+ ],
3100
+ [
3101
+ listQueryField,
3102
+ PluginsReadModelSpec$ReventlessCore.name
3103
+ ]
3104
+ ]);
3105
+ platformMCP.registerResourcesFromEntries("Admin", PluginBaseFragment$ReventlessCore.queryEntries, async (resourceName, uri) => {
3106
+ let segments = uri.split("/");
3107
+ let id = Stdlib_Option.getOr(segments.at(-1), "");
3108
+ let queryDbName = Stdlib_Option.getOr(adminFieldToQueryDb[resourceName], PluginsReadModelSpec$ReventlessCore.name);
3109
+ let ops = Bus.getQueryDb(queryDbName);
3110
+ if (ops === undefined) {
3111
+ return null;
3112
+ }
3113
+ if (id.length > 0 && id !== resourceName) {
3114
+ let items = await Effect.runPromise(Effect.catchAll(Stream.runCollect(ops.loadStream(id)), param => Effect.succeed([])));
3115
+ return Stdlib_Option.getOr(items[0], null);
3116
+ }
3117
+ let scanAll = Bus.getQueryDbScan(queryDbName);
3118
+ if (scanAll !== undefined) {
3119
+ return scanAll();
3120
+ } else {
3121
+ return [];
3122
+ }
3123
+ });
3124
+ platformMCP.registerToolsFromEntries("Admin", adminMutationEntries, async (toolName, args, _identity) => {
3125
+ let resolver = platformGraphQL.getMutationResolver(toolName);
3126
+ if (resolver === undefined) {
3127
+ return `error: no handler found for tool ` + toolName;
3128
+ }
3129
+ let result = await resolver(null, args, null);
3130
+ let s = Stdlib_JSON.Decode.string(result);
3131
+ if (s !== undefined) {
3132
+ return s;
3133
+ } else {
3134
+ return JSON.stringify(result);
3135
+ }
3136
+ });
3137
+ DomainGraphQL_Server$ReventlessLocal.registerTypes(GraphQL_Stitcher$ReventlessCore.relayBaseTypes);
3138
+ DomainGraphQL_Server$ReventlessLocal.registerQueries(GraphQL_Stitcher$ReventlessCore.relayBaseQueries, {});
3139
+ PlatformGraphQL_Server$ReventlessLocal.registerTypes(GraphQL_Stitcher$ReventlessCore.relayBaseTypes);
3140
+ currentDeployTarget.contents = "Domain";
3141
+ };
3142
+ let deployPlatform = (version, param) => {
3143
+ log.info("Platform", undefined, `deployPlatform v` + version);
3144
+ let scheduler = makeScheduler();
3145
+ hooks_scheduler.contents = scheduler;
3146
+ hooks_api.contents = {
3147
+ val: undefined
3148
+ };
3149
+ hooks_apiRole.contents = {
3150
+ val: undefined
3151
+ };
3152
+ Admin.construct(version, [], [], [], scheduler, LocalPluginSpec$ReventlessLocal.resourceNaming, undefined, undefined, [], [], [], [], []);
3153
+ currentDeployTarget.contents = "Platform";
3154
+ let adminGraphQL = resolveTargetGraphQL();
3155
+ let adminMCP = resolveTargetMCP();
3156
+ let baseParts = GraphQL_Stitcher$ReventlessCore.decode(AdminApi$ReventlessCore.baseFragment(false));
3157
+ adminGraphQL.registerTypes(baseParts.types);
3158
+ let queryResolvers = {};
3159
+ let adminQueryEntry = PluginBaseFragment$ReventlessCore.queryEntries[0];
3160
+ queryResolvers[adminQueryEntry.singleFieldName] = async (_root, _args, _ctx) => null;
3161
+ queryResolvers[adminQueryEntry.listFieldName] = async (_root, _args, _ctx) => connectionResponse([]);
3162
+ queryResolvers["Platform_UIFragments"] = async (_root, _args, _ctx) => [];
3163
+ registerAdminItemsAndIndexResolvers(queryResolvers, false);
3164
+ adminGraphQL.registerQueries(baseParts.queries, queryResolvers);
3165
+ let mutationResolvers = {};
3166
+ let adminMutationEntries = AdminApi$ReventlessCore.mutationEntries(false);
3167
+ let adminMutationFieldNames = adminMutationEntries.flatMap(entry => entry.fieldNames);
3168
+ adminMutationFieldNames.forEach(field => {
3169
+ mutationResolvers[field] = async (_root, _args, _ctx) => commandAccepted(Message$ReventlessCore.uuid(), undefined);
3170
+ });
3171
+ let dpSubTopic = "onUIFragmentChange";
3172
+ let addUIFragmentMutation2 = (fieldName, changeKind) => {
3173
+ mutationResolvers[fieldName] = async (_root, args, _ctx) => {
3174
+ let obj = Stdlib_Option.getOr(Stdlib_JSON.Decode.object(args), {});
3175
+ let pluginId = Stdlib_Option.getOr(Stdlib_Option.flatMap(obj["pluginId"], Stdlib_JSON.Decode.string), "");
3176
+ let manifest = Stdlib_Option.getOr(obj["manifest"], null);
3177
+ let event = Object.fromEntries([
3178
+ [
3179
+ "pluginId",
3180
+ Plugin$ReventlessCore.name(pluginId)
3181
+ ],
3182
+ [
3183
+ "changeKind",
3184
+ changeKind
3185
+ ],
3186
+ [
3187
+ "manifest",
3188
+ manifest
3189
+ ]
3190
+ ]);
3191
+ LocalGraphQL_SubscriptionResolvers$ReventlessLocal.publish(dpSubTopic, event);
3192
+ return event;
3193
+ };
3194
+ };
3195
+ addUIFragmentMutation2(Api_Naming$ReventlessCore.adminField("UIFragmentRegistered"), "Registered");
3196
+ addUIFragmentMutation2(Api_Naming$ReventlessCore.adminField("UIFragmentUpdated"), "Updated");
3197
+ addUIFragmentMutation2(Api_Naming$ReventlessCore.adminField("UIFragmentDeregistered"), "Deregistered");
3198
+ CommandGeneratorResolvers_GraphQL$ReventlessLocal.ensureCommandResultTypes(adminGraphQL);
3199
+ adminGraphQL.registerMutations(adminMutationSdl(baseParts.mutations), mutationResolvers);
3200
+ adminGraphQL.registerSubscriptions([
3201
+ " onUIFragmentChange: UIFragmentChangeEvent",
3202
+ " onPluginStatusChange: PluginStatusChangeEvent"
3203
+ ], Object.fromEntries([
3204
+ [
3205
+ "onUIFragmentChange",
3206
+ LocalGraphQL_SubscriptionResolvers$ReventlessLocal.makeFieldResolver(dpSubTopic)
3207
+ ],
3208
+ [
3209
+ "onPluginStatusChange",
3210
+ LocalGraphQL_SubscriptionResolvers$ReventlessLocal.makeFieldResolver("onPluginStatusChange")
3211
+ ]
3212
+ ]));
3213
+ currentDeployTarget.contents = "Domain";
3214
+ adminGraphQL.start(4001, Auth_GraphqlContext$ReventlessLocal.buildAuthContext, undefined);
3215
+ adminMCP.start(3002, undefined);
3216
+ DomainGraphQL_Server$ReventlessLocal.start(undefined, undefined, undefined);
3217
+ DomainMCP_Server$ReventlessLocal.start(undefined, undefined);
3218
+ Plugin_Helpers$ReventlessCore.firePlatformDeployedHook({
3219
+ name: "local",
3220
+ environment: "local",
3221
+ region: "local",
3222
+ domainApiEndpoint: "http://localhost:4000/graphql",
3223
+ domainApiRoleArn: "local",
3224
+ platformApiEndpoint: "http://localhost:4001/graphql",
3225
+ platformApiRoleArn: "local",
3226
+ adminResources: []
3227
+ });
3228
+ return {};
3229
+ };
3230
+ let deployPlugin = (plugin, apiTargetOpt) => {
3231
+ let apiTarget = apiTargetOpt !== undefined ? apiTargetOpt : "Domain";
3232
+ let tmp;
3233
+ tmp = apiTarget === "Domain" ? "Domain" : "Platform";
3234
+ log.info("Platform", undefined, `deployPlugin target=` + tmp);
3235
+ currentDeployTarget.contents = apiTarget;
3236
+ StateViewSliceMaker.QueryDbResolvers.serverRef.contents = resolveTargetGraphQL();
3237
+ let tmp$1;
3238
+ tmp$1 = apiTarget === "Domain" ? domainRelaySupport : undefined;
3239
+ StateViewSliceMaker.QueryDbResolvers.relayRef.contents = tmp$1;
3240
+ let scheduler = makeScheduler();
3241
+ hooks_scheduler.contents = scheduler;
3242
+ hooks_api.contents = {
3243
+ val: undefined
3244
+ };
3245
+ hooks_apiRole.contents = {
3246
+ val: undefined
3247
+ };
3248
+ let admin = Admin.construct("", [], [LocalPluginAggregate], [{
3249
+ Spec: PluginsReadModel.Spec,
3250
+ sourceNames: PluginsReadModel.sourceNames,
3251
+ make: PluginsReadModel.make,
3252
+ outputs: PluginsReadModel.outputs,
3253
+ operations: PluginsReadModel.operations,
3254
+ finish: PluginsReadModel.finish
3255
+ }], scheduler, LocalPluginSpec$ReventlessLocal.resourceNaming, undefined, undefined, [], [], [], [], []);
3256
+ hooks_adminExtensionPoints.contents = admin.extensionPointsOutputs.apply(eps => Object.fromEntries(eps.map(ep => [
3257
+ ep.name,
3258
+ ep
3259
+ ])));
3260
+ let existingBuiltHook = Plugin_Helpers$ReventlessCore.onPluginBuiltHook.contents;
3261
+ let builtInfos = {
3262
+ contents: []
3263
+ };
3264
+ Plugin_Helpers$ReventlessCore.registerOnPluginBuilt(info => {
3265
+ Stdlib_Option.forEach(existingBuiltHook, h => h(info));
3266
+ builtInfos.contents.push(info);
3267
+ });
3268
+ let pluginComponent = plugin.make();
3269
+ Plugin_Helpers$ReventlessCore.onPluginBuiltHook.contents = existingBuiltHook;
3270
+ let adminGraphQL = resolveTargetGraphQL();
3271
+ if (!adminRegisteredServers.contents.some(s => s === adminGraphQL)) {
3272
+ let baseParts = GraphQL_Stitcher$ReventlessCore.decode(AdminApi$ReventlessCore.baseFragment(false));
3273
+ adminGraphQL.registerTypes(baseParts.types);
3274
+ let queryResolvers = {};
3275
+ let adminQueryEntry = PluginBaseFragment$ReventlessCore.queryEntries[0];
3276
+ queryResolvers[adminQueryEntry.singleFieldName] = async (_root, _args, _ctx) => null;
3277
+ queryResolvers[adminQueryEntry.listFieldName] = async (_root, _args, _ctx) => connectionResponse([]);
3278
+ queryResolvers["Platform_UIFragments"] = async (_root, _args, _ctx) => {
3279
+ let scanAll = Bus.getQueryDbScan(UIFragmentRegistryReadModelSpec$ReventlessCore.name);
3280
+ let items = scanAll !== undefined ? scanAll() : [];
3281
+ return Stdlib_Array.filterMap(items, item => {
3282
+ let state;
3283
+ try {
3284
+ state = S.parseOrThrow(item, UIFragmentRegistryReadModelSpec$ReventlessCore.stateSchema);
3285
+ } catch (exn) {
3286
+ return;
3287
+ }
3288
+ return Platform_UIFragmentsApi$ReventlessCore.encodeUIFragmentEntry(state);
3289
+ });
3290
+ };
3291
+ queryResolvers["Platform_ComponentDefinitions"] = async (_root, _args, _ctx) => Object.entries(pluginStructuresStore.contents).map(param => Platform_ComponentDefinitionsApi$ReventlessCore.encodePluginStructureEntry(param[0], param[1]));
3292
+ registerAdminItemsAndIndexResolvers(queryResolvers, true);
3293
+ adminGraphQL.registerQueries(baseParts.queries, queryResolvers);
3294
+ let mutationResolvers = {};
3295
+ let adminMutationEntries = AdminApi$ReventlessCore.mutationEntries(false);
3296
+ let adminMutationFieldNames = adminMutationEntries.flatMap(entry => entry.fieldNames);
3297
+ adminMutationFieldNames.forEach(field => {
3298
+ mutationResolvers[field] = async (_root, _args, _ctx) => commandAccepted(Message$ReventlessCore.uuid(), undefined);
3299
+ });
3300
+ let dpSubTopic2 = "onUIFragmentChange";
3301
+ let addUIFragmentMutation3 = (fieldName, changeKind) => {
3302
+ mutationResolvers[fieldName] = async (_root, args, _ctx) => {
3303
+ let obj = Stdlib_Option.getOr(Stdlib_JSON.Decode.object(args), {});
3304
+ let pluginId = Stdlib_Option.getOr(Stdlib_Option.flatMap(obj["pluginId"], Stdlib_JSON.Decode.string), "");
3305
+ let manifest = Stdlib_Option.getOr(obj["manifest"], null);
3306
+ let event = Object.fromEntries([
3307
+ [
3308
+ "pluginId",
3309
+ Plugin$ReventlessCore.name(pluginId)
3310
+ ],
3311
+ [
3312
+ "changeKind",
3313
+ changeKind
3314
+ ],
3315
+ [
3316
+ "manifest",
3317
+ manifest
3318
+ ]
3319
+ ]);
3320
+ LocalGraphQL_SubscriptionResolvers$ReventlessLocal.publish(dpSubTopic2, event);
3321
+ return event;
3322
+ };
3323
+ };
3324
+ addUIFragmentMutation3(Api_Naming$ReventlessCore.adminField("UIFragmentRegistered"), "Registered");
3325
+ addUIFragmentMutation3(Api_Naming$ReventlessCore.adminField("UIFragmentUpdated"), "Updated");
3326
+ addUIFragmentMutation3(Api_Naming$ReventlessCore.adminField("UIFragmentDeregistered"), "Deregistered");
3327
+ CommandGeneratorResolvers_GraphQL$ReventlessLocal.ensureCommandResultTypes(adminGraphQL);
3328
+ adminGraphQL.registerMutations(adminMutationSdl(baseParts.mutations), mutationResolvers);
3329
+ adminGraphQL.registerSubscriptions([" onUIFragmentChange: UIFragmentChangeEvent"], Object.fromEntries([[
3330
+ "onUIFragmentChange",
3331
+ LocalGraphQL_SubscriptionResolvers$ReventlessLocal.makeFieldResolver(dpSubTopic2)
3332
+ ]]));
3333
+ adminRegisteredServers.contents.push(adminGraphQL);
3334
+ }
3335
+ currentDeployTarget.contents = "Domain";
3336
+ StateViewSliceMaker.QueryDbResolvers.serverRef.contents = DomainGraphQL_Server$ReventlessLocal.asInterface;
3337
+ StateViewSliceMaker.QueryDbResolvers.relayRef.contents = domainRelaySupport;
3338
+ subscribeToPluginEvents();
3339
+ connectPlugin([pluginComponent]);
3340
+ seedUIFragmentRegistryQueryDb([pluginComponent]);
3341
+ seedPluginStructuresStore([pluginComponent]);
3342
+ let deployedPluginOutputs = [Component$ReventlessCore.outputs(pluginComponent)];
3343
+ firePluginDeployedHooks(builtInfos.contents, deployedPluginOutputs);
3344
+ Plugin_Helpers$ReventlessCore.replayPlatformDeployedHook();
3345
+ return {};
3346
+ };
3347
+ let Counter_make = Counter.make;
3348
+ let Counter_outputs = Counter.outputs;
3349
+ let Counter_operations = Counter.operations;
3350
+ let Counter$1 = {
3351
+ make: Counter_make,
3352
+ outputs: Counter_outputs,
3353
+ operations: Counter_operations
3354
+ };
3355
+ return {
3356
+ api: undefined,
3357
+ apiRole: undefined,
3358
+ Aggregate: Aggregate,
3359
+ ReadModel: ReadModel,
3360
+ ReadModelStream: ReadModelStream,
3361
+ ExtensionPoint: ExtensionPoint,
3362
+ Extension: Extension,
3363
+ Task: Task,
3364
+ Counter: Counter$1,
3365
+ StateChangeSlice: StateChangeSlice,
3366
+ StateViewSlice: StateViewSlice,
3367
+ StateViewSliceStream: StateViewSliceStream,
3368
+ AutomationSlice: AutomationSlice,
3369
+ OutboundTranslationSlice: OutboundTranslationSlice,
3370
+ InboundTranslationSlice: InboundTranslationSlice,
3371
+ Api: Api,
3372
+ mcpSupported: true,
3373
+ Plugin: Plugin,
3374
+ makePlatform: makePlatform,
3375
+ deployPlatform: deployPlatform,
3376
+ deployPlugin: deployPlugin,
3377
+ startServers: startServers
3378
+ };
3379
+ }
3380
+
3381
+ export {
3382
+ log,
3383
+ platformGraphQLRef,
3384
+ getPlatformGraphQL,
3385
+ platformMCPRef,
3386
+ MakeWithConfig,
3387
+ Make,
3388
+ }
3389
+ /* Not a pure module */