@reventlessdev/reventless-local 3.0.0-alpha.142 → 3.0.0-alpha.143

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.
@@ -25,9 +25,12 @@ import * as PluginSpec$ReventlessCore from "@reventlessdev/reventless-core/src/p
25
25
  import * as UserStore$ReventlessLocal from "./adapter/Auth/UserStore.res.mjs";
26
26
  import * as Api_Builder$ReventlessCore from "@reventlessdev/reventless-core/src/components/Api/Api_Builder.res.mjs";
27
27
  import * as TestRunner$ReventlessLocal from "./test/TestRunner.res.mjs";
28
+ import * as UiFragments$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateViewSlice/UiFragments.res.mjs";
29
+ import * as ApiFragments$ReventlessCore from "@reventlessdev/reventless-core/src/admin/ApiFragmentRegistry/StateViewSlice/ApiFragments.res.mjs";
28
30
  import * as CommandTopic$ReventlessCore from "@reventlessdev/reventless-core/src/components/CommandTopic/CommandTopic.res.mjs";
29
31
  import * as EffectLogger$ReventlessCore from "@reventlessdev/reventless-core/src/util/EffectLogger.res.mjs";
30
32
  import * as BackendState$ReventlessLocal from "./adapter/BackendState.res.mjs";
33
+ import * as ComponentType$ReventlessCore from "@reventlessdev/reventless-core/src/ComponentType.res.mjs";
31
34
  import * as SqliteDriver$ReventlessLocal from "./adapter/SqliteDriver.res.mjs";
32
35
  import * as Task_Builder$ReventlessLocal from "./components/Task_Builder.res.mjs";
33
36
  import * as Platform_Admin$ReventlessCore from "@reventlessdev/reventless-core/src/admin/Platform_Admin.res.mjs";
@@ -48,9 +51,10 @@ import * as LocalClonerRunner$ReventlessLocal from "./adapter/Cloner/LocalCloner
48
51
  import * as PluginBaseFragment$ReventlessCore from "@reventlessdev/reventless-core/src/plugin/api/PluginBaseFragment.res.mjs";
49
52
  import * as ProjectionPending$ReventlessLocal from "./adapter/ProjectionPending.res.mjs";
50
53
  import * as ReadModel_Builder$ReventlessLocal from "./components/ReadModel_Builder.res.mjs";
54
+ import * as UiFragmentRegistry$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateChangeSlice/UiFragmentRegistry.res.mjs";
55
+ import * as ApiFragmentRegistry$ReventlessCore from "@reventlessdev/reventless-core/src/admin/ApiFragmentRegistry/StateChangeSlice/ApiFragmentRegistry.res.mjs";
51
56
  import * as PlatformMCP_Server$ReventlessLocal from "./adapter/PlatformMCP_Server.res.mjs";
52
57
  import * as Auth_GraphqlContext$ReventlessLocal from "./adapter/Auth/Auth_GraphqlContext.res.mjs";
53
- import * as LocalQueryDbStorage$ReventlessLocal from "./adapter/QueryDb/LocalQueryDbStorage.res.mjs";
54
58
  import * as PgProjectionCatchup$ReventlessLocal from "./adapter/PgProjectionCatchup.res.mjs";
55
59
  import * as PluginsReadModelSpec$ReventlessCore from "@reventlessdev/reventless-core/src/plugin/lifecycle/PluginsReadModelSpec.res.mjs";
56
60
  import * as DomainGraphQL_Server$ReventlessLocal from "./adapter/DomainGraphQL_Server.res.mjs";
@@ -58,6 +62,8 @@ import * as EventPublish_Callback$ReventlessCore from "@reventlessdev/reventless
58
62
  import * as LocalGraphQL_Adapter$ReventlessLocal from "./adapter/Api/LocalGraphQL_Adapter.res.mjs";
59
63
  import * as ProjectionCheckpoint$ReventlessLocal from "./adapter/ProjectionCheckpoint.res.mjs";
60
64
  import * as ExtensionPointMapping$ReventlessInfra from "@reventlessdev/reventless-infra/src/types/ExtensionPointMapping.res.mjs";
65
+ import * as UiFragments_Projection$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateViewSlice/UiFragments_Projection.res.mjs";
66
+ import * as ApiFragments_Projection$ReventlessCore from "@reventlessdev/reventless-core/src/admin/ApiFragmentRegistry/StateViewSlice/ApiFragments_Projection.res.mjs";
61
67
  import * as EventLogStorage_Sqlite$ReventlessLocal from "./adapter/EventLog/EventLogStorage_Sqlite.res.mjs";
62
68
  import * as ExtensionPoint_Builder$ReventlessLocal from "./components/ExtensionPoint_Builder.res.mjs";
63
69
  import * as PlatformGraphQL_Server$ReventlessLocal from "./adapter/PlatformGraphQL_Server.res.mjs";
@@ -68,13 +74,15 @@ import * as LocalDcbEventLogStorage$ReventlessLocal from "./adapter/DcbEventLog/
68
74
  import * as LocalRuntimeEnvironment$ReventlessLocal from "./adapter/Runtime/LocalRuntimeEnvironment.res.mjs";
69
75
  import * as LocalScheduledPublisher$ReventlessLocal from "./adapter/Scheduler/LocalScheduledPublisher.res.mjs";
70
76
  import * as Platform_Admin_Structure$ReventlessCore from "@reventlessdev/reventless-core/src/admin/Platform_Admin_Structure.res.mjs";
77
+ import * as Platform_ApiFragmentsApi$ReventlessCore from "@reventlessdev/reventless-core/src/admin/Platform_ApiFragmentsApi.res.mjs";
71
78
  import * as LocalCommandTopicChannel$ReventlessLocal from "./adapter/CommandTopic/LocalCommandTopicChannel.res.mjs";
72
79
  import * as LocalEventTopicPublisher$ReventlessLocal from "./adapter/EventTopic/LocalEventTopicPublisher.res.mjs";
73
80
  import * as StateChangeSlice_Builder$ReventlessLocal from "./components/StateChangeSlice_Builder.res.mjs";
74
81
  import * as DcbEventLogStorage_Sqlite$ReventlessLocal from "./adapter/DcbEventLog/DcbEventLogStorage_Sqlite.res.mjs";
75
82
  import * as LocalEventCollectorChannel$ReventlessLocal from "./adapter/EventCollector/LocalEventCollectorChannel.res.mjs";
76
83
  import * as PluginRuntime_Builder_Micro$ReventlessCore from "@reventlessdev/reventless-core/src/adapter/Runtime/PluginRuntime_Builder_Micro.res.mjs";
77
- import * as UIFragmentRegistryReadModelSpec$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UIFragmentRegistryReadModelSpec.res.mjs";
84
+ import * as UiFragmentRegistry_Behavior$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateChangeSlice/UiFragmentRegistry_Behavior.res.mjs";
85
+ import * as ApiFragmentRegistry_Behavior$ReventlessCore from "@reventlessdev/reventless-core/src/admin/ApiFragmentRegistry/StateChangeSlice/ApiFragmentRegistry_Behavior.res.mjs";
78
86
  import * as InboundTranslationSlice_Builder$ReventlessLocal from "./components/InboundTranslationSlice_Builder.res.mjs";
79
87
  import * as Platform_ComponentDefinitionsApi$ReventlessCore from "@reventlessdev/reventless-core/src/admin/Platform_ComponentDefinitionsApi.res.mjs";
80
88
  import * as OutboundTranslationSlice_Builder$ReventlessLocal from "./components/OutboundTranslationSlice_Builder.res.mjs";
@@ -106,6 +114,22 @@ function decodePluginEventEnvelope(eventJson) {
106
114
  }
107
115
  }
108
116
 
117
+ function decodeUiFragmentRegistryEventEnvelope(eventJson) {
118
+ try {
119
+ return Stdlib_Option.map(Stdlib_Option.flatMap(Stdlib_JSON.Decode.object(eventJson), d => d["event"]), payload => S.parseJsonOrThrow(payload, UiFragmentRegistry$ReventlessCore.eventSchema));
120
+ } catch (exn) {
121
+ return;
122
+ }
123
+ }
124
+
125
+ function decodeApiFragmentRegistryEventEnvelope(eventJson) {
126
+ try {
127
+ return Stdlib_Option.map(Stdlib_Option.flatMap(Stdlib_JSON.Decode.object(eventJson), d => d["event"]), payload => S.parseJsonOrThrow(payload, ApiFragmentRegistry$ReventlessCore.eventSchema));
128
+ } catch (exn) {
129
+ return;
130
+ }
131
+ }
132
+
109
133
  function MakeWithConfig(Config) {
110
134
  TestRunner$ReventlessLocal.setup();
111
135
  let match = Config.backend;
@@ -397,6 +421,9 @@ function MakeWithConfig(Config) {
397
421
  let hooks_apiRole = {
398
422
  contents: undefined
399
423
  };
424
+ let hooks_adminApi = {
425
+ contents: undefined
426
+ };
400
427
  let hooks_deployTarget = {
401
428
  contents: "Domain"
402
429
  };
@@ -412,6 +439,7 @@ function MakeWithConfig(Config) {
412
439
  schedulerRoleUrn: hooks_schedulerRoleUrn,
413
440
  api: hooks_api,
414
441
  apiRole: hooks_apiRole,
442
+ adminApi: hooks_adminApi,
415
443
  deployTarget: hooks_deployTarget
416
444
  };
417
445
  let AggregateMaker = Aggregate_Builder$ReventlessLocal.MakeWithHooks(Bus)({
@@ -578,6 +606,108 @@ function MakeWithConfig(Config) {
578
606
  let StateViewSlice = {
579
607
  Make: Make$7
580
608
  };
609
+ let Spec = {
610
+ name: UiFragmentRegistry$ReventlessCore.name,
611
+ moduleUrl: UiFragmentRegistry$ReventlessCore.moduleUrl,
612
+ Id: Id$Reventless.$$String,
613
+ consumedEventSchema: UiFragmentRegistry$ReventlessCore.consumedEventSchema,
614
+ errorSchema: UiFragmentRegistry$ReventlessCore.errorSchema,
615
+ eventSchema: UiFragmentRegistry$ReventlessCore.eventSchema,
616
+ commandSchema: UiFragmentRegistry$ReventlessCore.commandSchema,
617
+ commandAuthorization: UiFragmentRegistry$ReventlessCore.commandAuthorization,
618
+ readConsistency: UiFragmentRegistry$ReventlessCore.readConsistency
619
+ };
620
+ let Behavior = {
621
+ initialState: undefined,
622
+ evolve: UiFragmentRegistry_Behavior$ReventlessCore.evolve,
623
+ decide: UiFragmentRegistry_Behavior$ReventlessCore.decide,
624
+ moduleUrl: UiFragmentRegistry_Behavior$ReventlessCore.moduleUrl
625
+ };
626
+ let $$let = StateChangeSlice_Builder$ReventlessLocal.Make(Spec)(Behavior);
627
+ let UiFragmentRegistrySlice_Spec = $$let.Spec;
628
+ let UiFragmentRegistrySlice_Behavior = $$let.Behavior;
629
+ let UiFragmentRegistrySlice_isAsync = $$let.isAsync;
630
+ let UiFragmentRegistrySlice_make = $$let.make;
631
+ let UiFragmentRegistrySlice = {
632
+ Spec: UiFragmentRegistrySlice_Spec,
633
+ Behavior: UiFragmentRegistrySlice_Behavior,
634
+ isAsync: UiFragmentRegistrySlice_isAsync,
635
+ make: UiFragmentRegistrySlice_make
636
+ };
637
+ let Spec$1 = {
638
+ name: UiFragments$ReventlessCore.name,
639
+ moduleUrl: UiFragments$ReventlessCore.moduleUrl,
640
+ stateSchema: UiFragments$ReventlessCore.stateSchema,
641
+ consumedEventSchema: UiFragments$ReventlessCore.consumedEventSchema,
642
+ config: UiFragments$ReventlessCore.config,
643
+ subIdConfig: undefined,
644
+ authorization: UiFragments$ReventlessCore.authorization,
645
+ visibility: UiFragments$ReventlessCore.visibility
646
+ };
647
+ let Projection = {
648
+ project: UiFragments_Projection$ReventlessCore.project,
649
+ moduleUrl: UiFragments_Projection$ReventlessCore.moduleUrl
650
+ };
651
+ let $$let$1 = StateViewSliceMaker.Make(Spec$1)(Projection);
652
+ let UiFragmentsViewSlice_Spec = $$let$1.Spec;
653
+ let UiFragmentsViewSlice_Projection = $$let$1.Projection;
654
+ let UiFragmentsViewSlice_make = $$let$1.make;
655
+ let UiFragmentsViewSlice = {
656
+ Spec: UiFragmentsViewSlice_Spec,
657
+ Projection: UiFragmentsViewSlice_Projection,
658
+ make: UiFragmentsViewSlice_make
659
+ };
660
+ let Spec$2 = {
661
+ name: ApiFragmentRegistry$ReventlessCore.name,
662
+ moduleUrl: ApiFragmentRegistry$ReventlessCore.moduleUrl,
663
+ Id: Id$Reventless.$$String,
664
+ consumedEventSchema: ApiFragmentRegistry$ReventlessCore.consumedEventSchema,
665
+ errorSchema: ApiFragmentRegistry$ReventlessCore.errorSchema,
666
+ eventSchema: ApiFragmentRegistry$ReventlessCore.eventSchema,
667
+ commandSchema: ApiFragmentRegistry$ReventlessCore.commandSchema,
668
+ commandAuthorization: ApiFragmentRegistry$ReventlessCore.commandAuthorization,
669
+ readConsistency: ApiFragmentRegistry$ReventlessCore.readConsistency
670
+ };
671
+ let Behavior$1 = {
672
+ initialState: undefined,
673
+ evolve: ApiFragmentRegistry_Behavior$ReventlessCore.evolve,
674
+ decide: ApiFragmentRegistry_Behavior$ReventlessCore.decide,
675
+ moduleUrl: ApiFragmentRegistry_Behavior$ReventlessCore.moduleUrl
676
+ };
677
+ let $$let$2 = StateChangeSlice_Builder$ReventlessLocal.Make(Spec$2)(Behavior$1);
678
+ let ApiFragmentRegistrySlice_Spec = $$let$2.Spec;
679
+ let ApiFragmentRegistrySlice_Behavior = $$let$2.Behavior;
680
+ let ApiFragmentRegistrySlice_isAsync = $$let$2.isAsync;
681
+ let ApiFragmentRegistrySlice_make = $$let$2.make;
682
+ let ApiFragmentRegistrySlice = {
683
+ Spec: ApiFragmentRegistrySlice_Spec,
684
+ Behavior: ApiFragmentRegistrySlice_Behavior,
685
+ isAsync: ApiFragmentRegistrySlice_isAsync,
686
+ make: ApiFragmentRegistrySlice_make
687
+ };
688
+ let Spec$3 = {
689
+ name: ApiFragments$ReventlessCore.name,
690
+ moduleUrl: ApiFragments$ReventlessCore.moduleUrl,
691
+ stateSchema: ApiFragments$ReventlessCore.stateSchema,
692
+ consumedEventSchema: ApiFragments$ReventlessCore.consumedEventSchema,
693
+ config: ApiFragments$ReventlessCore.config,
694
+ subIdConfig: undefined,
695
+ authorization: ApiFragments$ReventlessCore.authorization,
696
+ visibility: ApiFragments$ReventlessCore.visibility
697
+ };
698
+ let Projection$1 = {
699
+ project: ApiFragments_Projection$ReventlessCore.project,
700
+ moduleUrl: ApiFragments_Projection$ReventlessCore.moduleUrl
701
+ };
702
+ let $$let$3 = StateViewSliceMaker.Make(Spec$3)(Projection$1);
703
+ let ApiFragmentsViewSlice_Spec = $$let$3.Spec;
704
+ let ApiFragmentsViewSlice_Projection = $$let$3.Projection;
705
+ let ApiFragmentsViewSlice_make = $$let$3.make;
706
+ let ApiFragmentsViewSlice = {
707
+ Spec: ApiFragmentsViewSlice_Spec,
708
+ Projection: ApiFragmentsViewSlice_Projection,
709
+ make: ApiFragmentsViewSlice_make
710
+ };
581
711
  let Make$8 = Spec => (Projection => {
582
712
  let $$let = StateViewSliceMaker.Make(Spec)(Projection);
583
713
  return {
@@ -621,7 +751,8 @@ function MakeWithConfig(Config) {
621
751
  types: [],
622
752
  mutations: [],
623
753
  queries: [],
624
- subscriptions: []
754
+ subscriptions: [],
755
+ subscriptionSources: []
625
756
  });
626
757
  let Make$12 = FragmentConfig => {
627
758
  let Builder = Api_Builder$ReventlessCore.Make(LocalGraphQL_Adapter$ReventlessLocal);
@@ -647,7 +778,7 @@ function MakeWithConfig(Config) {
647
778
  };
648
779
  let EventCollectorChannel = LocalEventCollectorChannel$ReventlessLocal.Make(Bus);
649
780
  let QE = LocalQueryEngine$ReventlessLocal.Make(Bus);
650
- let $$let = AggregateMaker.Make({
781
+ let $$let$4 = AggregateMaker.Make({
651
782
  Id: Id$Reventless.$$String,
652
783
  name: PluginSpec$ReventlessCore.name,
653
784
  eventSchema: PluginSpec$ReventlessCore.eventSchema,
@@ -666,11 +797,11 @@ function MakeWithConfig(Config) {
666
797
  Id: Id$Reventless.$$String,
667
798
  commandSchema: PluginSpec$ReventlessCore.commandSchema
668
799
  }));
669
- let LocalPluginAggregate_Spec = $$let.Spec;
670
- let LocalPluginAggregate_make = $$let.make;
671
- let LocalPluginAggregate_outputs = $$let.outputs;
672
- let LocalPluginAggregate_operations = $$let.operations;
673
- let LocalPluginAggregate_finish = $$let.finish;
800
+ let LocalPluginAggregate_Spec = $$let$4.Spec;
801
+ let LocalPluginAggregate_make = $$let$4.make;
802
+ let LocalPluginAggregate_outputs = $$let$4.outputs;
803
+ let LocalPluginAggregate_operations = $$let$4.operations;
804
+ let LocalPluginAggregate_finish = $$let$4.finish;
674
805
  let LocalPluginAggregate = {
675
806
  Spec: LocalPluginAggregate_Spec,
676
807
  make: LocalPluginAggregate_make,
@@ -692,8 +823,8 @@ function MakeWithConfig(Config) {
692
823
  authorization: PluginsReadModelSpec$ReventlessCore.authorization,
693
824
  visibility: PluginsReadModelSpec$ReventlessCore.visibility
694
825
  })(PluginsReadModelMappings);
695
- let $$let$1 = LocalCommandTopicChannel$ReventlessLocal.Make(Bus);
696
- let $$let$2 = LocalCommandTopicChannel$ReventlessLocal.Make(Bus);
826
+ let $$let$5 = LocalCommandTopicChannel$ReventlessLocal.Make(Bus);
827
+ let $$let$6 = LocalCommandTopicChannel$ReventlessLocal.Make(Bus);
697
828
  let Admin = Platform_Admin$ReventlessCore.Make({
698
829
  make: LocalRuntimeEnvironment$ReventlessLocal.make,
699
830
  groupBySource: LocalRuntimeEnvironment$ReventlessLocal.groupBySource,
@@ -709,9 +840,9 @@ function MakeWithConfig(Config) {
709
840
  asEventHandler: prim => prim,
710
841
  asEffectHandler: prim => prim
711
842
  })(EventCollectorChannel))(LocalDcbEventLogStorage$ReventlessLocal.Make(Bus))(LocalEventTopicPublisher$ReventlessLocal.Make(Bus))({
712
- make: $$let$1.make
843
+ make: $$let$5.make
713
844
  })({
714
- make: $$let$2.make
845
+ make: $$let$6.make
715
846
  })({
716
847
  silent: Config.silent,
717
848
  splitApi: Config.splitApi,
@@ -731,20 +862,6 @@ function MakeWithConfig(Config) {
731
862
  let domainMcpPort = resolvePort("REVENTLESS_DOMAIN_MCP_PORT", 3001);
732
863
  let platformPort = resolvePort("REVENTLESS_PLATFORM_PORT", 4001);
733
864
  let platformMcpPort = resolvePort("REVENTLESS_PLATFORM_MCP_PORT", 3002);
734
- let uiFragmentQueryDbOpsRef = {
735
- contents: undefined
736
- };
737
- let UIFragmentStorage = LocalQueryDbStorage$ReventlessLocal.Make(Bus);
738
- let ensureUIFragmentRegistryQueryDbStore = () => {
739
- let ops = uiFragmentQueryDbOpsRef.contents;
740
- if (ops !== undefined) {
741
- return ops;
742
- }
743
- UIFragmentStorage.make(UIFragmentRegistryReadModelSpec$ReventlessCore.name, [], undefined, undefined, undefined, undefined, {});
744
- let ops$1 = Stdlib_Option.getOrThrow(Bus.getQueryDb(UIFragmentRegistryReadModelSpec$ReventlessCore.name), undefined);
745
- uiFragmentQueryDbOpsRef.contents = ops$1;
746
- return ops$1;
747
- };
748
865
  let pluginStructuresStore = {
749
866
  contents: {}
750
867
  };
@@ -775,8 +892,43 @@ function MakeWithConfig(Config) {
775
892
  };
776
893
  return Bus.dispatchCommand(pluginCmdTopicKey, CommandTopic$ReventlessCore.encodeCommandJson(cmdJson));
777
894
  };
895
+ let adminDcbCmdTopicKey = ComponentType$ReventlessCore.name("AdminDcb", "CommandTopic");
896
+ let dispatchUiFragmentCommand = (pluginName, command) => {
897
+ let cmdJson_meta = Message$ReventlessCore.generateMeta(UiFragmentRegistry$ReventlessCore.name, undefined, undefined, undefined, undefined, undefined, undefined, undefined);
898
+ let cmdJson_commandJson = S.reverseConvertToJsonOrThrow(command, UiFragmentRegistry$ReventlessCore.commandSchema);
899
+ let cmdJson = {
900
+ id: pluginName,
901
+ meta: cmdJson_meta,
902
+ commandJson: cmdJson_commandJson
903
+ };
904
+ return Bus.dispatchCommand(adminDcbCmdTopicKey, CommandTopic$ReventlessCore.encodeCommandJson(cmdJson));
905
+ };
906
+ let dispatchApiFragmentCommand = (pluginName, command) => {
907
+ let cmdJson_meta = Message$ReventlessCore.generateMeta(ApiFragmentRegistry$ReventlessCore.name, undefined, undefined, undefined, undefined, undefined, undefined, undefined);
908
+ let cmdJson_commandJson = S.reverseConvertToJsonOrThrow(command, ApiFragmentRegistry$ReventlessCore.commandSchema);
909
+ let cmdJson = {
910
+ id: pluginName,
911
+ meta: cmdJson_meta,
912
+ commandJson: cmdJson_commandJson
913
+ };
914
+ return Bus.dispatchCommand(adminDcbCmdTopicKey, CommandTopic$ReventlessCore.encodeCommandJson(cmdJson));
915
+ };
916
+ let apiFragmentsQueryResolver = async (_root, _args, _ctx) => {
917
+ let scanAll = Bus.getQueryDbScan(ApiFragments$ReventlessCore.name);
918
+ let items = scanAll !== undefined ? scanAll() : [];
919
+ return Stdlib_Array.filterMap(items, item => {
920
+ let state;
921
+ try {
922
+ state = S.parseOrThrow(item, ApiFragments$ReventlessCore.stateSchema);
923
+ } catch (exn) {
924
+ return;
925
+ }
926
+ return Platform_ApiFragmentsApi$ReventlessCore.encodeApiFragmentEntry(state);
927
+ });
928
+ };
778
929
  let pluginStatusSubTopic = "onPluginStatusChange";
779
930
  let uiFragmentSubTopic = "onUIFragmentChange";
931
+ let adminDcbEventTopicKey = ComponentType$ReventlessCore.name("Admin", "EventTopic");
780
932
  let pluginEventsSubscribed = {
781
933
  contents: false
782
934
  };
@@ -825,18 +977,49 @@ function MakeWithConfig(Config) {
825
977
  case "VersionSuperseded" :
826
978
  case "IncompatiblePluginDetected" :
827
979
  return;
828
- case "UIFragmentRegistered" :
829
- let data = match._0;
830
- return publishUIFragment(Plugin$ReventlessCore.name(data.pluginId), "Registered", S.reverseConvertToJsonOrThrow(data.manifest, Plugin$Reventless.uiFragmentManifestSchema));
831
- case "UIFragmentUpdated" :
832
- let data$1 = match._0;
833
- return publishUIFragment(Plugin$ReventlessCore.name(data$1.pluginId), "Updated", S.reverseConvertToJsonOrThrow(data$1.newManifest, Plugin$Reventless.uiFragmentManifestSchema));
834
- case "UIFragmentDeregistered" :
835
- return publishUIFragment(Plugin$ReventlessCore.name(match._0.pluginId), "Deregistered", null);
836
980
  default:
837
981
  return publishStatus(match._0.name, "Connected");
838
982
  }
839
983
  });
984
+ Bus.subscribeToEvents(adminDcbEventTopicKey, async (service, _meta, eventJson) => {
985
+ if (service !== "AdminDcbEventLog") {
986
+ return;
987
+ }
988
+ let match = decodeUiFragmentRegistryEventEnvelope(eventJson);
989
+ if (match !== undefined) {
990
+ switch (match.TAG) {
991
+ case "UiFragmentRegistered" :
992
+ publishUIFragment(match.pluginId, "Registered", S.reverseConvertToJsonOrThrow(match.manifest, Plugin$Reventless.uiFragmentManifestSchema));
993
+ break;
994
+ case "UiFragmentUpdated" :
995
+ publishUIFragment(match.pluginId, "Updated", S.reverseConvertToJsonOrThrow(match.newManifest, Plugin$Reventless.uiFragmentManifestSchema));
996
+ break;
997
+ case "UiFragmentDeregistered" :
998
+ publishUIFragment(match.pluginId, "Deregistered", null);
999
+ break;
1000
+ }
1001
+ }
1002
+ let match$1 = decodeApiFragmentRegistryEventEnvelope(eventJson);
1003
+ if (match$1 === undefined) {
1004
+ return;
1005
+ }
1006
+ switch (match$1.TAG) {
1007
+ case "ApiFragmentRegistered" :
1008
+ case "ApiFragmentUpdated" :
1009
+ break;
1010
+ case "ApiFragmentDeregistered" :
1011
+ case "ApiFragmentPushRecorded" :
1012
+ return;
1013
+ }
1014
+ let pluginId = match$1.pluginId;
1015
+ dispatchApiFragmentCommand(pluginId, {
1016
+ TAG: "RecordApiFragmentPush",
1017
+ pluginId: pluginId,
1018
+ ok: true,
1019
+ message: "",
1020
+ at: new Date().toISOString()
1021
+ });
1022
+ });
840
1023
  };
841
1024
  let connectPlugin = pluginComponents => {
842
1025
  pluginComponents.forEach(plugin => {
@@ -851,6 +1034,8 @@ function MakeWithConfig(Config) {
851
1034
  outputs.uiFragments,
852
1035
  outputs.pluginStructure
853
1036
  ]).apply(param => {
1037
+ let uiFragments = param[6];
1038
+ let apiSchemaFragment = param[5];
854
1039
  let id = param[0];
855
1040
  let pluginName = Stdlib_Option.getOr(id.split("@")[0], id);
856
1041
  let pluginDefinition = {
@@ -875,9 +1060,8 @@ function MakeWithConfig(Config) {
875
1060
  }),
876
1061
  eventCollector: param[2].name,
877
1062
  extensionProtocols: [],
878
- apiSchemaFragment: param[5],
1063
+ apiSchemaFragment: apiSchemaFragment,
879
1064
  apiTarget: undefined,
880
- uiFragments: param[6],
881
1065
  structure: param[7],
882
1066
  dcbEventLog: undefined,
883
1067
  kind: "Domain"
@@ -886,37 +1070,24 @@ function MakeWithConfig(Config) {
886
1070
  TAG: "Connect",
887
1071
  _0: pluginDefinition
888
1072
  });
889
- });
890
- });
891
- };
892
- let seedUIFragmentRegistryQueryDb = pluginComponents => {
893
- let uiFragmentOps = ensureUIFragmentRegistryQueryDbStore();
894
- pluginComponents.forEach(plugin => {
895
- let outputs = Component$ReventlessCore.outputs(plugin);
896
- Pulumi.all([
897
- outputs.id,
898
- outputs.uiFragments
899
- ]).apply(param => {
900
- let uiFragments = param[1];
901
- if (uiFragments === undefined) {
1073
+ if (uiFragments !== undefined) {
1074
+ dispatchUiFragmentCommand(pluginName, {
1075
+ TAG: "RegisterUiFragment",
1076
+ pluginId: pluginName,
1077
+ manifest: uiFragments,
1078
+ at: new Date().toISOString()
1079
+ });
1080
+ }
1081
+ if (apiSchemaFragment !== undefined) {
1082
+ dispatchApiFragmentCommand(pluginName, {
1083
+ TAG: "RegisterApiFragment",
1084
+ pluginId: pluginName,
1085
+ fragment: apiSchemaFragment,
1086
+ apiTarget: "Domain",
1087
+ at: new Date().toISOString()
1088
+ });
902
1089
  return;
903
1090
  }
904
- let id = param[0];
905
- let state_remoteEntryUrl = uiFragments.remoteEntryUrl;
906
- let state_panels = uiFragments.panels;
907
- let state_pages = uiFragments.pages;
908
- let state_registeredAt = new Date().toISOString();
909
- let state_updatedAt = new Date().toISOString();
910
- let state = {
911
- pluginId: id,
912
- remoteEntryUrl: state_remoteEntryUrl,
913
- panels: state_panels,
914
- pages: state_pages,
915
- registeredAt: state_registeredAt,
916
- updatedAt: state_updatedAt
917
- };
918
- let entry = S.reverseConvertToJsonOrThrow(state, UIFragmentRegistryReadModelSpec$ReventlessCore.stateSchema);
919
- uiFragmentOps.save(id, entry, "Any", undefined);
920
1091
  });
921
1092
  });
922
1093
  };
@@ -1130,7 +1301,13 @@ function MakeWithConfig(Config) {
1130
1301
  outputs: PluginsReadModel.outputs,
1131
1302
  operations: PluginsReadModel.operations,
1132
1303
  finish: PluginsReadModel.finish
1133
- }], scheduler, LocalPluginSpec$ReventlessLocal.resourceNaming, undefined, undefined, [], [], [], [], []);
1304
+ }], scheduler, LocalPluginSpec$ReventlessLocal.resourceNaming, undefined, undefined, [
1305
+ UiFragmentRegistrySlice,
1306
+ ApiFragmentRegistrySlice
1307
+ ], [
1308
+ UiFragmentsViewSlice,
1309
+ ApiFragmentsViewSlice
1310
+ ], [], [], []);
1134
1311
  hooks_adminExtensionPoints.contents = admin.extensionPointsOutputs.apply(eps => Object.fromEntries(eps.map(ep => [
1135
1312
  ep.name,
1136
1313
  ep
@@ -1172,17 +1349,13 @@ function MakeWithConfig(Config) {
1172
1349
  adminResources: []
1173
1350
  });
1174
1351
  subscribeToPluginEvents();
1175
- let seedAdminStores = () => {
1176
- connectPlugin(plugins$1);
1177
- seedUIFragmentRegistryQueryDb(plugins$1);
1178
- seedPluginStructuresStore(plugins$1);
1179
- };
1180
1352
  if (projectionCatchup !== undefined) {
1181
1353
  Stdlib_Promise.$$catch(ProjectionCheckpoint$ReventlessLocal.startupCatchup(projectionCatchup[0], projectionCatchup[1], projectionCatchup[2], () => Bus.projectionCatchupHandlers()), e => {
1182
1354
  console.error("[Platform] projection catch-up failed:", e);
1183
1355
  return Promise.resolve();
1184
1356
  }).then(() => {
1185
- seedAdminStores();
1357
+ connectPlugin(plugins$1);
1358
+ seedPluginStructuresStore(plugins$1);
1186
1359
  return Promise.resolve();
1187
1360
  });
1188
1361
  } else if (pgProjectionCatchup !== undefined) {
@@ -1191,11 +1364,13 @@ function MakeWithConfig(Config) {
1191
1364
  console.error("[Platform] postgres projection catch-up failed:", e);
1192
1365
  return Promise.resolve();
1193
1366
  }).then(() => {
1194
- seedAdminStores();
1367
+ connectPlugin(plugins$1);
1368
+ seedPluginStructuresStore(plugins$1);
1195
1369
  return Promise.resolve();
1196
1370
  });
1197
1371
  } else {
1198
- seedAdminStores();
1372
+ connectPlugin(plugins$1);
1373
+ seedPluginStructuresStore(plugins$1);
1199
1374
  }
1200
1375
  pluginStructuresStore.contents[Platform_Admin_Structure$ReventlessCore.pluginId] = Platform_Admin_Structure$ReventlessCore.structure;
1201
1376
  CommandGeneratorResolvers_GraphQL$ReventlessLocal.setPluginStatusGate(field => {
@@ -1316,13 +1491,13 @@ function MakeWithConfig(Config) {
1316
1491
  });
1317
1492
  };
1318
1493
  queryResolvers["Platform_UIFragments"] = async (_root, _args, _ctx) => {
1319
- let scanAll = Bus.getQueryDbScan(UIFragmentRegistryReadModelSpec$ReventlessCore.name);
1494
+ let scanAll = Bus.getQueryDbScan(UiFragments$ReventlessCore.name);
1320
1495
  let items = scanAll !== undefined ? scanAll() : [];
1321
1496
  let latestByName = {};
1322
1497
  items.forEach(item => {
1323
1498
  let state;
1324
1499
  try {
1325
- state = S.parseOrThrow(item, UIFragmentRegistryReadModelSpec$ReventlessCore.stateSchema);
1500
+ state = S.parseOrThrow(item, UiFragments$ReventlessCore.stateSchema);
1326
1501
  } catch (exn) {
1327
1502
  return;
1328
1503
  }
@@ -1341,6 +1516,7 @@ function MakeWithConfig(Config) {
1341
1516
  });
1342
1517
  return Object.values(latestByName).map(param => Platform_UIFragmentsApi$ReventlessCore.encodeUIFragmentEntry(param[1]));
1343
1518
  };
1519
+ queryResolvers["Platform_ApiFragments"] = apiFragmentsQueryResolver;
1344
1520
  registerAdminItemsAndIndexResolvers(queryResolvers, true);
1345
1521
  platformGraphQL.registerQueries(baseParts.queries, queryResolvers);
1346
1522
  let argId = args => Stdlib_Option.getOr(Stdlib_Option.flatMap(Stdlib_Option.flatMap(Stdlib_JSON.Decode.object(args), d => d["id"]), Stdlib_JSON.Decode.string), "");
@@ -1427,8 +1603,8 @@ function MakeWithConfig(Config) {
1427
1603
  platformGraphQL.registerMutations(adminMutationSdl(baseParts.mutations), mutationResolvers);
1428
1604
  adminRegisteredServers.contents.push(platformGraphQL);
1429
1605
  platformGraphQL.registerSubscriptions([
1430
- " onUIFragmentChange: UIFragmentChangeEvent",
1431
- " onPluginStatusChange: PluginStatusChangeEvent"
1606
+ AdminApi$ReventlessCore.uiFragmentSubscriptionField,
1607
+ AdminApi$ReventlessCore.pluginStatusSubscriptionField
1432
1608
  ], Object.fromEntries([
1433
1609
  [
1434
1610
  "onUIFragmentChange",
@@ -1503,7 +1679,13 @@ function MakeWithConfig(Config) {
1503
1679
  hooks_apiRole.contents = {
1504
1680
  val: undefined
1505
1681
  };
1506
- Admin.construct(version, [], [], [], scheduler, LocalPluginSpec$ReventlessLocal.resourceNaming, undefined, undefined, [], [], [], [], []);
1682
+ Admin.construct(version, [], [], [], scheduler, LocalPluginSpec$ReventlessLocal.resourceNaming, undefined, undefined, [
1683
+ UiFragmentRegistrySlice,
1684
+ ApiFragmentRegistrySlice
1685
+ ], [
1686
+ UiFragmentsViewSlice,
1687
+ ApiFragmentsViewSlice
1688
+ ], [], [], []);
1507
1689
  currentDeployTarget.contents = "Platform";
1508
1690
  let adminGraphQL = resolveTargetGraphQL();
1509
1691
  let adminMCP = resolveTargetMCP();
@@ -1514,6 +1696,7 @@ function MakeWithConfig(Config) {
1514
1696
  queryResolvers[adminQueryEntry.singleFieldName] = async (_root, _args, _ctx) => null;
1515
1697
  queryResolvers[adminQueryEntry.listFieldName] = async (_root, _args, _ctx) => connectionResponse([]);
1516
1698
  queryResolvers["Platform_UIFragments"] = async (_root, _args, _ctx) => [];
1699
+ queryResolvers["Platform_ApiFragments"] = apiFragmentsQueryResolver;
1517
1700
  registerAdminItemsAndIndexResolvers(queryResolvers, false);
1518
1701
  adminGraphQL.registerQueries(baseParts.queries, queryResolvers);
1519
1702
  let mutationResolvers = {};
@@ -1609,7 +1792,13 @@ function MakeWithConfig(Config) {
1609
1792
  outputs: PluginsReadModel.outputs,
1610
1793
  operations: PluginsReadModel.operations,
1611
1794
  finish: PluginsReadModel.finish
1612
- }], scheduler, LocalPluginSpec$ReventlessLocal.resourceNaming, undefined, undefined, [], [], [], [], []);
1795
+ }], scheduler, LocalPluginSpec$ReventlessLocal.resourceNaming, undefined, undefined, [
1796
+ UiFragmentRegistrySlice,
1797
+ ApiFragmentRegistrySlice
1798
+ ], [
1799
+ UiFragmentsViewSlice,
1800
+ ApiFragmentsViewSlice
1801
+ ], [], [], []);
1613
1802
  hooks_adminExtensionPoints.contents = admin.extensionPointsOutputs.apply(eps => Object.fromEntries(eps.map(ep => [
1614
1803
  ep.name,
1615
1804
  ep
@@ -1633,18 +1822,19 @@ function MakeWithConfig(Config) {
1633
1822
  queryResolvers[adminQueryEntry.singleFieldName] = async (_root, _args, _ctx) => null;
1634
1823
  queryResolvers[adminQueryEntry.listFieldName] = async (_root, _args, _ctx) => connectionResponse([]);
1635
1824
  queryResolvers["Platform_UIFragments"] = async (_root, _args, _ctx) => {
1636
- let scanAll = Bus.getQueryDbScan(UIFragmentRegistryReadModelSpec$ReventlessCore.name);
1825
+ let scanAll = Bus.getQueryDbScan(UiFragments$ReventlessCore.name);
1637
1826
  let items = scanAll !== undefined ? scanAll() : [];
1638
1827
  return Stdlib_Array.filterMap(items, item => {
1639
1828
  let state;
1640
1829
  try {
1641
- state = S.parseOrThrow(item, UIFragmentRegistryReadModelSpec$ReventlessCore.stateSchema);
1830
+ state = S.parseOrThrow(item, UiFragments$ReventlessCore.stateSchema);
1642
1831
  } catch (exn) {
1643
1832
  return;
1644
1833
  }
1645
1834
  return Platform_UIFragmentsApi$ReventlessCore.encodeUIFragmentEntry(state);
1646
1835
  });
1647
1836
  };
1837
+ queryResolvers["Platform_ApiFragments"] = apiFragmentsQueryResolver;
1648
1838
  queryResolvers["Platform_ComponentDefinitions"] = async (_root, _args, _ctx) => Object.entries(pluginStructuresStore.contents).map(param => Platform_ComponentDefinitionsApi$ReventlessCore.encodePluginStructureEntry(param[0], param[1]));
1649
1839
  registerAdminItemsAndIndexResolvers(queryResolvers, true);
1650
1840
  adminGraphQL.registerQueries(baseParts.queries, queryResolvers);
@@ -1694,7 +1884,6 @@ function MakeWithConfig(Config) {
1694
1884
  StateViewSliceMaker.QueryDbResolvers.relayRef.contents = domainRelaySupport;
1695
1885
  subscribeToPluginEvents();
1696
1886
  connectPlugin([pluginComponent]);
1697
- seedUIFragmentRegistryQueryDb([pluginComponent]);
1698
1887
  seedPluginStructuresStore([pluginComponent]);
1699
1888
  let deployedPluginOutputs = [Component$ReventlessCore.outputs(pluginComponent)];
1700
1889
  firePluginDeployedHooks(builtInfos.contents, deployedPluginOutputs);
@@ -2025,6 +2214,9 @@ function Make($star) {
2025
2214
  let hooks_apiRole = {
2026
2215
  contents: undefined
2027
2216
  };
2217
+ let hooks_adminApi = {
2218
+ contents: undefined
2219
+ };
2028
2220
  let hooks_deployTarget = {
2029
2221
  contents: "Domain"
2030
2222
  };
@@ -2040,6 +2232,7 @@ function Make($star) {
2040
2232
  schedulerRoleUrn: hooks_schedulerRoleUrn,
2041
2233
  api: hooks_api,
2042
2234
  apiRole: hooks_apiRole,
2235
+ adminApi: hooks_adminApi,
2043
2236
  deployTarget: hooks_deployTarget
2044
2237
  };
2045
2238
  let AggregateMaker = Aggregate_Builder$ReventlessLocal.MakeWithHooks(Bus)({
@@ -2206,6 +2399,108 @@ function Make($star) {
2206
2399
  let StateViewSlice = {
2207
2400
  Make: Make$8
2208
2401
  };
2402
+ let Spec = {
2403
+ name: UiFragmentRegistry$ReventlessCore.name,
2404
+ moduleUrl: UiFragmentRegistry$ReventlessCore.moduleUrl,
2405
+ Id: Id$Reventless.$$String,
2406
+ consumedEventSchema: UiFragmentRegistry$ReventlessCore.consumedEventSchema,
2407
+ errorSchema: UiFragmentRegistry$ReventlessCore.errorSchema,
2408
+ eventSchema: UiFragmentRegistry$ReventlessCore.eventSchema,
2409
+ commandSchema: UiFragmentRegistry$ReventlessCore.commandSchema,
2410
+ commandAuthorization: UiFragmentRegistry$ReventlessCore.commandAuthorization,
2411
+ readConsistency: UiFragmentRegistry$ReventlessCore.readConsistency
2412
+ };
2413
+ let Behavior = {
2414
+ initialState: undefined,
2415
+ evolve: UiFragmentRegistry_Behavior$ReventlessCore.evolve,
2416
+ decide: UiFragmentRegistry_Behavior$ReventlessCore.decide,
2417
+ moduleUrl: UiFragmentRegistry_Behavior$ReventlessCore.moduleUrl
2418
+ };
2419
+ let $$let = StateChangeSlice_Builder$ReventlessLocal.Make(Spec)(Behavior);
2420
+ let UiFragmentRegistrySlice_Spec = $$let.Spec;
2421
+ let UiFragmentRegistrySlice_Behavior = $$let.Behavior;
2422
+ let UiFragmentRegistrySlice_isAsync = $$let.isAsync;
2423
+ let UiFragmentRegistrySlice_make = $$let.make;
2424
+ let UiFragmentRegistrySlice = {
2425
+ Spec: UiFragmentRegistrySlice_Spec,
2426
+ Behavior: UiFragmentRegistrySlice_Behavior,
2427
+ isAsync: UiFragmentRegistrySlice_isAsync,
2428
+ make: UiFragmentRegistrySlice_make
2429
+ };
2430
+ let Spec$1 = {
2431
+ name: UiFragments$ReventlessCore.name,
2432
+ moduleUrl: UiFragments$ReventlessCore.moduleUrl,
2433
+ stateSchema: UiFragments$ReventlessCore.stateSchema,
2434
+ consumedEventSchema: UiFragments$ReventlessCore.consumedEventSchema,
2435
+ config: UiFragments$ReventlessCore.config,
2436
+ subIdConfig: undefined,
2437
+ authorization: UiFragments$ReventlessCore.authorization,
2438
+ visibility: UiFragments$ReventlessCore.visibility
2439
+ };
2440
+ let Projection = {
2441
+ project: UiFragments_Projection$ReventlessCore.project,
2442
+ moduleUrl: UiFragments_Projection$ReventlessCore.moduleUrl
2443
+ };
2444
+ let $$let$1 = StateViewSliceMaker.Make(Spec$1)(Projection);
2445
+ let UiFragmentsViewSlice_Spec = $$let$1.Spec;
2446
+ let UiFragmentsViewSlice_Projection = $$let$1.Projection;
2447
+ let UiFragmentsViewSlice_make = $$let$1.make;
2448
+ let UiFragmentsViewSlice = {
2449
+ Spec: UiFragmentsViewSlice_Spec,
2450
+ Projection: UiFragmentsViewSlice_Projection,
2451
+ make: UiFragmentsViewSlice_make
2452
+ };
2453
+ let Spec$2 = {
2454
+ name: ApiFragmentRegistry$ReventlessCore.name,
2455
+ moduleUrl: ApiFragmentRegistry$ReventlessCore.moduleUrl,
2456
+ Id: Id$Reventless.$$String,
2457
+ consumedEventSchema: ApiFragmentRegistry$ReventlessCore.consumedEventSchema,
2458
+ errorSchema: ApiFragmentRegistry$ReventlessCore.errorSchema,
2459
+ eventSchema: ApiFragmentRegistry$ReventlessCore.eventSchema,
2460
+ commandSchema: ApiFragmentRegistry$ReventlessCore.commandSchema,
2461
+ commandAuthorization: ApiFragmentRegistry$ReventlessCore.commandAuthorization,
2462
+ readConsistency: ApiFragmentRegistry$ReventlessCore.readConsistency
2463
+ };
2464
+ let Behavior$1 = {
2465
+ initialState: undefined,
2466
+ evolve: ApiFragmentRegistry_Behavior$ReventlessCore.evolve,
2467
+ decide: ApiFragmentRegistry_Behavior$ReventlessCore.decide,
2468
+ moduleUrl: ApiFragmentRegistry_Behavior$ReventlessCore.moduleUrl
2469
+ };
2470
+ let $$let$2 = StateChangeSlice_Builder$ReventlessLocal.Make(Spec$2)(Behavior$1);
2471
+ let ApiFragmentRegistrySlice_Spec = $$let$2.Spec;
2472
+ let ApiFragmentRegistrySlice_Behavior = $$let$2.Behavior;
2473
+ let ApiFragmentRegistrySlice_isAsync = $$let$2.isAsync;
2474
+ let ApiFragmentRegistrySlice_make = $$let$2.make;
2475
+ let ApiFragmentRegistrySlice = {
2476
+ Spec: ApiFragmentRegistrySlice_Spec,
2477
+ Behavior: ApiFragmentRegistrySlice_Behavior,
2478
+ isAsync: ApiFragmentRegistrySlice_isAsync,
2479
+ make: ApiFragmentRegistrySlice_make
2480
+ };
2481
+ let Spec$3 = {
2482
+ name: ApiFragments$ReventlessCore.name,
2483
+ moduleUrl: ApiFragments$ReventlessCore.moduleUrl,
2484
+ stateSchema: ApiFragments$ReventlessCore.stateSchema,
2485
+ consumedEventSchema: ApiFragments$ReventlessCore.consumedEventSchema,
2486
+ config: ApiFragments$ReventlessCore.config,
2487
+ subIdConfig: undefined,
2488
+ authorization: ApiFragments$ReventlessCore.authorization,
2489
+ visibility: ApiFragments$ReventlessCore.visibility
2490
+ };
2491
+ let Projection$1 = {
2492
+ project: ApiFragments_Projection$ReventlessCore.project,
2493
+ moduleUrl: ApiFragments_Projection$ReventlessCore.moduleUrl
2494
+ };
2495
+ let $$let$3 = StateViewSliceMaker.Make(Spec$3)(Projection$1);
2496
+ let ApiFragmentsViewSlice_Spec = $$let$3.Spec;
2497
+ let ApiFragmentsViewSlice_Projection = $$let$3.Projection;
2498
+ let ApiFragmentsViewSlice_make = $$let$3.make;
2499
+ let ApiFragmentsViewSlice = {
2500
+ Spec: ApiFragmentsViewSlice_Spec,
2501
+ Projection: ApiFragmentsViewSlice_Projection,
2502
+ make: ApiFragmentsViewSlice_make
2503
+ };
2209
2504
  let Make$9 = Spec => (Projection => {
2210
2505
  let $$let = StateViewSliceMaker.Make(Spec)(Projection);
2211
2506
  return {
@@ -2249,7 +2544,8 @@ function Make($star) {
2249
2544
  types: [],
2250
2545
  mutations: [],
2251
2546
  queries: [],
2252
- subscriptions: []
2547
+ subscriptions: [],
2548
+ subscriptionSources: []
2253
2549
  });
2254
2550
  let Make$13 = FragmentConfig => {
2255
2551
  let Builder = Api_Builder$ReventlessCore.Make(LocalGraphQL_Adapter$ReventlessLocal);
@@ -2274,7 +2570,7 @@ function Make($star) {
2274
2570
  };
2275
2571
  let EventCollectorChannel = LocalEventCollectorChannel$ReventlessLocal.Make(Bus);
2276
2572
  let QE = LocalQueryEngine$ReventlessLocal.Make(Bus);
2277
- let $$let = AggregateMaker.Make({
2573
+ let $$let$4 = AggregateMaker.Make({
2278
2574
  Id: Id$Reventless.$$String,
2279
2575
  name: PluginSpec$ReventlessCore.name,
2280
2576
  eventSchema: PluginSpec$ReventlessCore.eventSchema,
@@ -2293,11 +2589,11 @@ function Make($star) {
2293
2589
  Id: Id$Reventless.$$String,
2294
2590
  commandSchema: PluginSpec$ReventlessCore.commandSchema
2295
2591
  }));
2296
- let LocalPluginAggregate_Spec = $$let.Spec;
2297
- let LocalPluginAggregate_make = $$let.make;
2298
- let LocalPluginAggregate_outputs = $$let.outputs;
2299
- let LocalPluginAggregate_operations = $$let.operations;
2300
- let LocalPluginAggregate_finish = $$let.finish;
2592
+ let LocalPluginAggregate_Spec = $$let$4.Spec;
2593
+ let LocalPluginAggregate_make = $$let$4.make;
2594
+ let LocalPluginAggregate_outputs = $$let$4.outputs;
2595
+ let LocalPluginAggregate_operations = $$let$4.operations;
2596
+ let LocalPluginAggregate_finish = $$let$4.finish;
2301
2597
  let LocalPluginAggregate = {
2302
2598
  Spec: LocalPluginAggregate_Spec,
2303
2599
  make: LocalPluginAggregate_make,
@@ -2319,8 +2615,8 @@ function Make($star) {
2319
2615
  authorization: PluginsReadModelSpec$ReventlessCore.authorization,
2320
2616
  visibility: PluginsReadModelSpec$ReventlessCore.visibility
2321
2617
  })(PluginsReadModelMappings);
2322
- let $$let$1 = LocalCommandTopicChannel$ReventlessLocal.Make(Bus);
2323
- let $$let$2 = LocalCommandTopicChannel$ReventlessLocal.Make(Bus);
2618
+ let $$let$5 = LocalCommandTopicChannel$ReventlessLocal.Make(Bus);
2619
+ let $$let$6 = LocalCommandTopicChannel$ReventlessLocal.Make(Bus);
2324
2620
  let Admin = Platform_Admin$ReventlessCore.Make({
2325
2621
  make: LocalRuntimeEnvironment$ReventlessLocal.make,
2326
2622
  groupBySource: LocalRuntimeEnvironment$ReventlessLocal.groupBySource,
@@ -2336,9 +2632,9 @@ function Make($star) {
2336
2632
  asEventHandler: prim => prim,
2337
2633
  asEffectHandler: prim => prim
2338
2634
  })(EventCollectorChannel))(LocalDcbEventLogStorage$ReventlessLocal.Make(Bus))(LocalEventTopicPublisher$ReventlessLocal.Make(Bus))({
2339
- make: $$let$1.make
2635
+ make: $$let$5.make
2340
2636
  })({
2341
- make: $$let$2.make
2637
+ make: $$let$6.make
2342
2638
  })({
2343
2639
  silent: false,
2344
2640
  splitApi: true,
@@ -2358,20 +2654,6 @@ function Make($star) {
2358
2654
  let domainMcpPort = resolvePort("REVENTLESS_DOMAIN_MCP_PORT", 3001);
2359
2655
  let platformPort = resolvePort("REVENTLESS_PLATFORM_PORT", 4001);
2360
2656
  let platformMcpPort = resolvePort("REVENTLESS_PLATFORM_MCP_PORT", 3002);
2361
- let uiFragmentQueryDbOpsRef = {
2362
- contents: undefined
2363
- };
2364
- let UIFragmentStorage = LocalQueryDbStorage$ReventlessLocal.Make(Bus);
2365
- let ensureUIFragmentRegistryQueryDbStore = () => {
2366
- let ops = uiFragmentQueryDbOpsRef.contents;
2367
- if (ops !== undefined) {
2368
- return ops;
2369
- }
2370
- UIFragmentStorage.make(UIFragmentRegistryReadModelSpec$ReventlessCore.name, [], undefined, undefined, undefined, undefined, {});
2371
- let ops$1 = Stdlib_Option.getOrThrow(Bus.getQueryDb(UIFragmentRegistryReadModelSpec$ReventlessCore.name), undefined);
2372
- uiFragmentQueryDbOpsRef.contents = ops$1;
2373
- return ops$1;
2374
- };
2375
2657
  let pluginStructuresStore = {
2376
2658
  contents: {}
2377
2659
  };
@@ -2402,8 +2684,43 @@ function Make($star) {
2402
2684
  };
2403
2685
  return Bus.dispatchCommand(pluginCmdTopicKey, CommandTopic$ReventlessCore.encodeCommandJson(cmdJson));
2404
2686
  };
2687
+ let adminDcbCmdTopicKey = ComponentType$ReventlessCore.name("AdminDcb", "CommandTopic");
2688
+ let dispatchUiFragmentCommand = (pluginName, command) => {
2689
+ let cmdJson_meta = Message$ReventlessCore.generateMeta(UiFragmentRegistry$ReventlessCore.name, undefined, undefined, undefined, undefined, undefined, undefined, undefined);
2690
+ let cmdJson_commandJson = S.reverseConvertToJsonOrThrow(command, UiFragmentRegistry$ReventlessCore.commandSchema);
2691
+ let cmdJson = {
2692
+ id: pluginName,
2693
+ meta: cmdJson_meta,
2694
+ commandJson: cmdJson_commandJson
2695
+ };
2696
+ return Bus.dispatchCommand(adminDcbCmdTopicKey, CommandTopic$ReventlessCore.encodeCommandJson(cmdJson));
2697
+ };
2698
+ let dispatchApiFragmentCommand = (pluginName, command) => {
2699
+ let cmdJson_meta = Message$ReventlessCore.generateMeta(ApiFragmentRegistry$ReventlessCore.name, undefined, undefined, undefined, undefined, undefined, undefined, undefined);
2700
+ let cmdJson_commandJson = S.reverseConvertToJsonOrThrow(command, ApiFragmentRegistry$ReventlessCore.commandSchema);
2701
+ let cmdJson = {
2702
+ id: pluginName,
2703
+ meta: cmdJson_meta,
2704
+ commandJson: cmdJson_commandJson
2705
+ };
2706
+ return Bus.dispatchCommand(adminDcbCmdTopicKey, CommandTopic$ReventlessCore.encodeCommandJson(cmdJson));
2707
+ };
2708
+ let apiFragmentsQueryResolver = async (_root, _args, _ctx) => {
2709
+ let scanAll = Bus.getQueryDbScan(ApiFragments$ReventlessCore.name);
2710
+ let items = scanAll !== undefined ? scanAll() : [];
2711
+ return Stdlib_Array.filterMap(items, item => {
2712
+ let state;
2713
+ try {
2714
+ state = S.parseOrThrow(item, ApiFragments$ReventlessCore.stateSchema);
2715
+ } catch (exn) {
2716
+ return;
2717
+ }
2718
+ return Platform_ApiFragmentsApi$ReventlessCore.encodeApiFragmentEntry(state);
2719
+ });
2720
+ };
2405
2721
  let pluginStatusSubTopic = "onPluginStatusChange";
2406
2722
  let uiFragmentSubTopic = "onUIFragmentChange";
2723
+ let adminDcbEventTopicKey = ComponentType$ReventlessCore.name("Admin", "EventTopic");
2407
2724
  let pluginEventsSubscribed = {
2408
2725
  contents: false
2409
2726
  };
@@ -2452,18 +2769,49 @@ function Make($star) {
2452
2769
  case "VersionSuperseded" :
2453
2770
  case "IncompatiblePluginDetected" :
2454
2771
  return;
2455
- case "UIFragmentRegistered" :
2456
- let data = match._0;
2457
- return publishUIFragment(Plugin$ReventlessCore.name(data.pluginId), "Registered", S.reverseConvertToJsonOrThrow(data.manifest, Plugin$Reventless.uiFragmentManifestSchema));
2458
- case "UIFragmentUpdated" :
2459
- let data$1 = match._0;
2460
- return publishUIFragment(Plugin$ReventlessCore.name(data$1.pluginId), "Updated", S.reverseConvertToJsonOrThrow(data$1.newManifest, Plugin$Reventless.uiFragmentManifestSchema));
2461
- case "UIFragmentDeregistered" :
2462
- return publishUIFragment(Plugin$ReventlessCore.name(match._0.pluginId), "Deregistered", null);
2463
2772
  default:
2464
2773
  return publishStatus(match._0.name, "Connected");
2465
2774
  }
2466
2775
  });
2776
+ Bus.subscribeToEvents(adminDcbEventTopicKey, async (service, _meta, eventJson) => {
2777
+ if (service !== "AdminDcbEventLog") {
2778
+ return;
2779
+ }
2780
+ let match = decodeUiFragmentRegistryEventEnvelope(eventJson);
2781
+ if (match !== undefined) {
2782
+ switch (match.TAG) {
2783
+ case "UiFragmentRegistered" :
2784
+ publishUIFragment(match.pluginId, "Registered", S.reverseConvertToJsonOrThrow(match.manifest, Plugin$Reventless.uiFragmentManifestSchema));
2785
+ break;
2786
+ case "UiFragmentUpdated" :
2787
+ publishUIFragment(match.pluginId, "Updated", S.reverseConvertToJsonOrThrow(match.newManifest, Plugin$Reventless.uiFragmentManifestSchema));
2788
+ break;
2789
+ case "UiFragmentDeregistered" :
2790
+ publishUIFragment(match.pluginId, "Deregistered", null);
2791
+ break;
2792
+ }
2793
+ }
2794
+ let match$1 = decodeApiFragmentRegistryEventEnvelope(eventJson);
2795
+ if (match$1 === undefined) {
2796
+ return;
2797
+ }
2798
+ switch (match$1.TAG) {
2799
+ case "ApiFragmentRegistered" :
2800
+ case "ApiFragmentUpdated" :
2801
+ break;
2802
+ case "ApiFragmentDeregistered" :
2803
+ case "ApiFragmentPushRecorded" :
2804
+ return;
2805
+ }
2806
+ let pluginId = match$1.pluginId;
2807
+ dispatchApiFragmentCommand(pluginId, {
2808
+ TAG: "RecordApiFragmentPush",
2809
+ pluginId: pluginId,
2810
+ ok: true,
2811
+ message: "",
2812
+ at: new Date().toISOString()
2813
+ });
2814
+ });
2467
2815
  };
2468
2816
  let connectPlugin = pluginComponents => {
2469
2817
  pluginComponents.forEach(plugin => {
@@ -2478,6 +2826,8 @@ function Make($star) {
2478
2826
  outputs.uiFragments,
2479
2827
  outputs.pluginStructure
2480
2828
  ]).apply(param => {
2829
+ let uiFragments = param[6];
2830
+ let apiSchemaFragment = param[5];
2481
2831
  let id = param[0];
2482
2832
  let pluginName = Stdlib_Option.getOr(id.split("@")[0], id);
2483
2833
  let pluginDefinition = {
@@ -2502,9 +2852,8 @@ function Make($star) {
2502
2852
  }),
2503
2853
  eventCollector: param[2].name,
2504
2854
  extensionProtocols: [],
2505
- apiSchemaFragment: param[5],
2855
+ apiSchemaFragment: apiSchemaFragment,
2506
2856
  apiTarget: undefined,
2507
- uiFragments: param[6],
2508
2857
  structure: param[7],
2509
2858
  dcbEventLog: undefined,
2510
2859
  kind: "Domain"
@@ -2513,37 +2862,24 @@ function Make($star) {
2513
2862
  TAG: "Connect",
2514
2863
  _0: pluginDefinition
2515
2864
  });
2516
- });
2517
- });
2518
- };
2519
- let seedUIFragmentRegistryQueryDb = pluginComponents => {
2520
- let uiFragmentOps = ensureUIFragmentRegistryQueryDbStore();
2521
- pluginComponents.forEach(plugin => {
2522
- let outputs = Component$ReventlessCore.outputs(plugin);
2523
- Pulumi.all([
2524
- outputs.id,
2525
- outputs.uiFragments
2526
- ]).apply(param => {
2527
- let uiFragments = param[1];
2528
- if (uiFragments === undefined) {
2865
+ if (uiFragments !== undefined) {
2866
+ dispatchUiFragmentCommand(pluginName, {
2867
+ TAG: "RegisterUiFragment",
2868
+ pluginId: pluginName,
2869
+ manifest: uiFragments,
2870
+ at: new Date().toISOString()
2871
+ });
2872
+ }
2873
+ if (apiSchemaFragment !== undefined) {
2874
+ dispatchApiFragmentCommand(pluginName, {
2875
+ TAG: "RegisterApiFragment",
2876
+ pluginId: pluginName,
2877
+ fragment: apiSchemaFragment,
2878
+ apiTarget: "Domain",
2879
+ at: new Date().toISOString()
2880
+ });
2529
2881
  return;
2530
2882
  }
2531
- let id = param[0];
2532
- let state_remoteEntryUrl = uiFragments.remoteEntryUrl;
2533
- let state_panels = uiFragments.panels;
2534
- let state_pages = uiFragments.pages;
2535
- let state_registeredAt = new Date().toISOString();
2536
- let state_updatedAt = new Date().toISOString();
2537
- let state = {
2538
- pluginId: id,
2539
- remoteEntryUrl: state_remoteEntryUrl,
2540
- panels: state_panels,
2541
- pages: state_pages,
2542
- registeredAt: state_registeredAt,
2543
- updatedAt: state_updatedAt
2544
- };
2545
- let entry = S.reverseConvertToJsonOrThrow(state, UIFragmentRegistryReadModelSpec$ReventlessCore.stateSchema);
2546
- uiFragmentOps.save(id, entry, "Any", undefined);
2547
2883
  });
2548
2884
  });
2549
2885
  };
@@ -2752,7 +3088,13 @@ function Make($star) {
2752
3088
  outputs: PluginsReadModel.outputs,
2753
3089
  operations: PluginsReadModel.operations,
2754
3090
  finish: PluginsReadModel.finish
2755
- }], scheduler, LocalPluginSpec$ReventlessLocal.resourceNaming, undefined, undefined, [], [], [], [], []);
3091
+ }], scheduler, LocalPluginSpec$ReventlessLocal.resourceNaming, undefined, undefined, [
3092
+ UiFragmentRegistrySlice,
3093
+ ApiFragmentRegistrySlice
3094
+ ], [
3095
+ UiFragmentsViewSlice,
3096
+ ApiFragmentsViewSlice
3097
+ ], [], [], []);
2756
3098
  hooks_adminExtensionPoints.contents = admin.extensionPointsOutputs.apply(eps => Object.fromEntries(eps.map(ep => [
2757
3099
  ep.name,
2758
3100
  ep
@@ -2794,17 +3136,13 @@ function Make($star) {
2794
3136
  adminResources: []
2795
3137
  });
2796
3138
  subscribeToPluginEvents();
2797
- let seedAdminStores = () => {
2798
- connectPlugin(plugins$1);
2799
- seedUIFragmentRegistryQueryDb(plugins$1);
2800
- seedPluginStructuresStore(plugins$1);
2801
- };
2802
3139
  if (projectionCatchup !== undefined) {
2803
3140
  Stdlib_Promise.$$catch(ProjectionCheckpoint$ReventlessLocal.startupCatchup(projectionCatchup[0], projectionCatchup[1], projectionCatchup[2], () => Bus.projectionCatchupHandlers()), e => {
2804
3141
  console.error("[Platform] projection catch-up failed:", e);
2805
3142
  return Promise.resolve();
2806
3143
  }).then(() => {
2807
- seedAdminStores();
3144
+ connectPlugin(plugins$1);
3145
+ seedPluginStructuresStore(plugins$1);
2808
3146
  return Promise.resolve();
2809
3147
  });
2810
3148
  } else if (pgProjectionCatchup !== undefined) {
@@ -2813,11 +3151,13 @@ function Make($star) {
2813
3151
  console.error("[Platform] postgres projection catch-up failed:", e);
2814
3152
  return Promise.resolve();
2815
3153
  }).then(() => {
2816
- seedAdminStores();
3154
+ connectPlugin(plugins$1);
3155
+ seedPluginStructuresStore(plugins$1);
2817
3156
  return Promise.resolve();
2818
3157
  });
2819
3158
  } else {
2820
- seedAdminStores();
3159
+ connectPlugin(plugins$1);
3160
+ seedPluginStructuresStore(plugins$1);
2821
3161
  }
2822
3162
  pluginStructuresStore.contents[Platform_Admin_Structure$ReventlessCore.pluginId] = Platform_Admin_Structure$ReventlessCore.structure;
2823
3163
  CommandGeneratorResolvers_GraphQL$ReventlessLocal.setPluginStatusGate(field => {
@@ -2938,13 +3278,13 @@ function Make($star) {
2938
3278
  });
2939
3279
  };
2940
3280
  queryResolvers["Platform_UIFragments"] = async (_root, _args, _ctx) => {
2941
- let scanAll = Bus.getQueryDbScan(UIFragmentRegistryReadModelSpec$ReventlessCore.name);
3281
+ let scanAll = Bus.getQueryDbScan(UiFragments$ReventlessCore.name);
2942
3282
  let items = scanAll !== undefined ? scanAll() : [];
2943
3283
  let latestByName = {};
2944
3284
  items.forEach(item => {
2945
3285
  let state;
2946
3286
  try {
2947
- state = S.parseOrThrow(item, UIFragmentRegistryReadModelSpec$ReventlessCore.stateSchema);
3287
+ state = S.parseOrThrow(item, UiFragments$ReventlessCore.stateSchema);
2948
3288
  } catch (exn) {
2949
3289
  return;
2950
3290
  }
@@ -2963,6 +3303,7 @@ function Make($star) {
2963
3303
  });
2964
3304
  return Object.values(latestByName).map(param => Platform_UIFragmentsApi$ReventlessCore.encodeUIFragmentEntry(param[1]));
2965
3305
  };
3306
+ queryResolvers["Platform_ApiFragments"] = apiFragmentsQueryResolver;
2966
3307
  registerAdminItemsAndIndexResolvers(queryResolvers, true);
2967
3308
  platformGraphQL.registerQueries(baseParts.queries, queryResolvers);
2968
3309
  let argId = args => Stdlib_Option.getOr(Stdlib_Option.flatMap(Stdlib_Option.flatMap(Stdlib_JSON.Decode.object(args), d => d["id"]), Stdlib_JSON.Decode.string), "");
@@ -3049,8 +3390,8 @@ function Make($star) {
3049
3390
  platformGraphQL.registerMutations(adminMutationSdl(baseParts.mutations), mutationResolvers);
3050
3391
  adminRegisteredServers.contents.push(platformGraphQL);
3051
3392
  platformGraphQL.registerSubscriptions([
3052
- " onUIFragmentChange: UIFragmentChangeEvent",
3053
- " onPluginStatusChange: PluginStatusChangeEvent"
3393
+ AdminApi$ReventlessCore.uiFragmentSubscriptionField,
3394
+ AdminApi$ReventlessCore.pluginStatusSubscriptionField
3054
3395
  ], Object.fromEntries([
3055
3396
  [
3056
3397
  "onUIFragmentChange",
@@ -3118,7 +3459,13 @@ function Make($star) {
3118
3459
  hooks_apiRole.contents = {
3119
3460
  val: undefined
3120
3461
  };
3121
- Admin.construct(version, [], [], [], scheduler, LocalPluginSpec$ReventlessLocal.resourceNaming, undefined, undefined, [], [], [], [], []);
3462
+ Admin.construct(version, [], [], [], scheduler, LocalPluginSpec$ReventlessLocal.resourceNaming, undefined, undefined, [
3463
+ UiFragmentRegistrySlice,
3464
+ ApiFragmentRegistrySlice
3465
+ ], [
3466
+ UiFragmentsViewSlice,
3467
+ ApiFragmentsViewSlice
3468
+ ], [], [], []);
3122
3469
  currentDeployTarget.contents = "Platform";
3123
3470
  let adminGraphQL = resolveTargetGraphQL();
3124
3471
  let adminMCP = resolveTargetMCP();
@@ -3129,6 +3476,7 @@ function Make($star) {
3129
3476
  queryResolvers[adminQueryEntry.singleFieldName] = async (_root, _args, _ctx) => null;
3130
3477
  queryResolvers[adminQueryEntry.listFieldName] = async (_root, _args, _ctx) => connectionResponse([]);
3131
3478
  queryResolvers["Platform_UIFragments"] = async (_root, _args, _ctx) => [];
3479
+ queryResolvers["Platform_ApiFragments"] = apiFragmentsQueryResolver;
3132
3480
  registerAdminItemsAndIndexResolvers(queryResolvers, false);
3133
3481
  adminGraphQL.registerQueries(baseParts.queries, queryResolvers);
3134
3482
  let mutationResolvers = {};
@@ -3222,7 +3570,13 @@ function Make($star) {
3222
3570
  outputs: PluginsReadModel.outputs,
3223
3571
  operations: PluginsReadModel.operations,
3224
3572
  finish: PluginsReadModel.finish
3225
- }], scheduler, LocalPluginSpec$ReventlessLocal.resourceNaming, undefined, undefined, [], [], [], [], []);
3573
+ }], scheduler, LocalPluginSpec$ReventlessLocal.resourceNaming, undefined, undefined, [
3574
+ UiFragmentRegistrySlice,
3575
+ ApiFragmentRegistrySlice
3576
+ ], [
3577
+ UiFragmentsViewSlice,
3578
+ ApiFragmentsViewSlice
3579
+ ], [], [], []);
3226
3580
  hooks_adminExtensionPoints.contents = admin.extensionPointsOutputs.apply(eps => Object.fromEntries(eps.map(ep => [
3227
3581
  ep.name,
3228
3582
  ep
@@ -3246,18 +3600,19 @@ function Make($star) {
3246
3600
  queryResolvers[adminQueryEntry.singleFieldName] = async (_root, _args, _ctx) => null;
3247
3601
  queryResolvers[adminQueryEntry.listFieldName] = async (_root, _args, _ctx) => connectionResponse([]);
3248
3602
  queryResolvers["Platform_UIFragments"] = async (_root, _args, _ctx) => {
3249
- let scanAll = Bus.getQueryDbScan(UIFragmentRegistryReadModelSpec$ReventlessCore.name);
3603
+ let scanAll = Bus.getQueryDbScan(UiFragments$ReventlessCore.name);
3250
3604
  let items = scanAll !== undefined ? scanAll() : [];
3251
3605
  return Stdlib_Array.filterMap(items, item => {
3252
3606
  let state;
3253
3607
  try {
3254
- state = S.parseOrThrow(item, UIFragmentRegistryReadModelSpec$ReventlessCore.stateSchema);
3608
+ state = S.parseOrThrow(item, UiFragments$ReventlessCore.stateSchema);
3255
3609
  } catch (exn) {
3256
3610
  return;
3257
3611
  }
3258
3612
  return Platform_UIFragmentsApi$ReventlessCore.encodeUIFragmentEntry(state);
3259
3613
  });
3260
3614
  };
3615
+ queryResolvers["Platform_ApiFragments"] = apiFragmentsQueryResolver;
3261
3616
  queryResolvers["Platform_ComponentDefinitions"] = async (_root, _args, _ctx) => Object.entries(pluginStructuresStore.contents).map(param => Platform_ComponentDefinitionsApi$ReventlessCore.encodePluginStructureEntry(param[0], param[1]));
3262
3617
  registerAdminItemsAndIndexResolvers(queryResolvers, true);
3263
3618
  adminGraphQL.registerQueries(baseParts.queries, queryResolvers);
@@ -3307,7 +3662,6 @@ function Make($star) {
3307
3662
  StateViewSliceMaker.QueryDbResolvers.relayRef.contents = domainRelaySupport;
3308
3663
  subscribeToPluginEvents();
3309
3664
  connectPlugin([pluginComponent]);
3310
- seedUIFragmentRegistryQueryDb([pluginComponent]);
3311
3665
  seedPluginStructuresStore([pluginComponent]);
3312
3666
  let deployedPluginOutputs = [Component$ReventlessCore.outputs(pluginComponent)];
3313
3667
  firePluginDeployedHooks(builtInfos.contents, deployedPluginOutputs);
@@ -3354,6 +3708,8 @@ export {
3354
3708
  getPlatformGraphQL,
3355
3709
  platformMCPRef,
3356
3710
  decodePluginEventEnvelope,
3711
+ decodeUiFragmentRegistryEventEnvelope,
3712
+ decodeApiFragmentRegistryEventEnvelope,
3357
3713
  MakeWithConfig,
3358
3714
  Make,
3359
3715
  }