@reventlessdev/reventless-aws 3.0.0-alpha.201 → 3.0.0-alpha.203
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/package.json +7 -7
- package/src/Platform.res +129 -25
- package/src/Platform.res.mjs +210 -102
- package/src/adapter/Api/ApiFragmentDeregistration.res +5 -4
- package/src/adapter/Api/ApiFragmentDeregistration.res.mjs +2 -2
- package/src/adapter/Api/ApiSchemaPush.res +54 -0
- package/src/adapter/Api/ApiSchemaPush.res.mjs +37 -0
- package/src/adapter/Runtime/ApiSchemaPush_Runtime.mjs +197 -0
- package/src/adapter/Runtime/SideEffectHandlerRuntime_Builder_Single.res +47 -0
- package/src/adapter/Runtime/SideEffectHandlerRuntime_Builder_Single.res.mjs +34 -0
- package/src/components/SideEffectHandler_Single.res +8 -0
- package/src/components/SideEffectHandler_Single.res.mjs +5 -2
package/src/Platform.res.mjs
CHANGED
|
@@ -31,7 +31,7 @@ import * as Api_Builder$ReventlessCore from "@reventlessdev/reventless-core/src/
|
|
|
31
31
|
import * as Plugin_Stack$ReventlessAws from "./plugin/stack/Plugin_Stack.res.mjs";
|
|
32
32
|
import * as UiFragments$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateViewSlice/UiFragments.res.mjs";
|
|
33
33
|
import * as Util_Pulumi$ReventlessCore from "@reventlessdev/reventless-core/src/util/Util_Pulumi.res.mjs";
|
|
34
|
-
import * as
|
|
34
|
+
import * as ApiSchemaPush$ReventlessAws from "./adapter/Api/ApiSchemaPush.res.mjs";
|
|
35
35
|
import * as Util_DynamoDb$ReventlessAws from "./util/Util_DynamoDb.res.mjs";
|
|
36
36
|
import * as Platform_Casts$ReventlessAws from "./Platform_Casts.res.mjs";
|
|
37
37
|
import * as Platform_Stack$ReventlessAws from "./Platform_Stack.res.mjs";
|
|
@@ -57,7 +57,6 @@ import * as StateTopic_AppSync$ReventlessAws from "./adapter/StateTopic/StateTop
|
|
|
57
57
|
import * as UiFragmentRegistry$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateChangeSlice/UiFragmentRegistry.res.mjs";
|
|
58
58
|
import * as Util_AppSync_Caller$ReventlessAws from "./util/Util_AppSync_Caller.res.mjs";
|
|
59
59
|
import * as Util_ResourceNaming$ReventlessAws from "./util/Util_ResourceNaming.res.mjs";
|
|
60
|
-
import * as ApiFragmentRegistry$ReventlessCore from "@reventlessdev/reventless-core/src/admin/ApiFragmentRegistry/StateChangeSlice/ApiFragmentRegistry.res.mjs";
|
|
61
60
|
import * as ClonerRunner_Fargate$ReventlessAws from "./plugin/cloner/ClonerRunner_Fargate.res.mjs";
|
|
62
61
|
import * as QueryEngine_DynamoDb$ReventlessAws from "./adapter/QueryEngine/QueryEngine_DynamoDb.res.mjs";
|
|
63
62
|
import * as PluginRuntime_Builder$ReventlessAws from "./plugin/runtime/PluginRuntime_Builder.res.mjs";
|
|
@@ -65,26 +64,29 @@ import * as PluginsReadModelSpec$ReventlessCore from "@reventlessdev/reventless-
|
|
|
65
64
|
import * as ExtensionPoint_Builder$ReventlessAws from "./components/ExtensionPoint_Builder.res.mjs";
|
|
66
65
|
import * as StateViewSlice_Builder$ReventlessAws from "./components/StateViewSlice_Builder.res.mjs";
|
|
67
66
|
import * as Task_Builder_PerBucket$ReventlessAws from "./components/Task_Builder_PerBucket.res.mjs";
|
|
67
|
+
import * as ApiFragmentsProjection$ReventlessCore from "@reventlessdev/reventless-core/src/admin/ApiFragmentRegistry/ApiFragmentsProjection.res.mjs";
|
|
68
68
|
import * as AutomationSlice_Builder$ReventlessAws from "./components/AutomationSlice_Builder.res.mjs";
|
|
69
69
|
import * as EventTopicPublisher_SNS$ReventlessAws from "./adapter/EventTopic/EventTopicPublisher_SNS.res.mjs";
|
|
70
70
|
import * as ExtensionPointMapping$ReventlessInfra from "@reventlessdev/reventless-infra/src/types/ExtensionPointMapping.res.mjs";
|
|
71
71
|
import * as PgQueryResolver_Builder$ReventlessAws from "./adapter/QueryDb/PgQueryResolver_Builder.res.mjs";
|
|
72
72
|
import * as UiFragments_Projection$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateViewSlice/UiFragments_Projection.res.mjs";
|
|
73
73
|
import * as Aggregate_Builder_Single$ReventlessAws from "./components/Aggregate_Builder_Single.res.mjs";
|
|
74
|
-
import * as
|
|
74
|
+
import * as ApiFragmentRegistrySpec$ReventlessCore from "@reventlessdev/reventless-core/src/admin/ApiFragmentRegistry/ApiFragmentRegistrySpec.res.mjs";
|
|
75
75
|
import * as ReadModel_Builder_Single$ReventlessAws from "./components/ReadModel_Builder_Single.res.mjs";
|
|
76
|
+
import * as SideEffectHandler_Single$ReventlessAws from "./components/SideEffectHandler_Single.res.mjs";
|
|
76
77
|
import * as StateChangeSlice_Builder$ReventlessAws from "./components/StateChangeSlice_Builder.res.mjs";
|
|
77
78
|
import * as ApiFragmentDeregistration$ReventlessAws from "./adapter/Api/ApiFragmentDeregistration.res.mjs";
|
|
78
79
|
import * as EventCollectorChannel_SQS$ReventlessAws from "./adapter/EventCollector/EventCollectorChannel_SQS.res.mjs";
|
|
79
80
|
import * as PgChangeFeedRelay_Builder$ReventlessAws from "./adapter/Postgres/PgChangeFeedRelay_Builder.res.mjs";
|
|
80
81
|
import * as RuntimeEnvironment_Lambda$ReventlessAws from "./adapter/Runtime/RuntimeEnvironment_Lambda.res.mjs";
|
|
82
|
+
import * as ApiFragmentsReadModelSpec$ReventlessCore from "@reventlessdev/reventless-core/src/admin/ApiFragmentRegistry/ApiFragmentsReadModelSpec.res.mjs";
|
|
81
83
|
import * as PluginExtensionPointSpec$ReventlessInfra from "@reventlessdev/reventless-infra/src/types/PluginExtensionPointSpec.res.mjs";
|
|
82
84
|
import * as Platform_UIFragments_Lambda$ReventlessAws from "./adapter/Api/Platform_UIFragments_Lambda.res.mjs";
|
|
85
|
+
import * as ApiFragmentRegistryBehavior$ReventlessCore from "@reventlessdev/reventless-core/src/admin/ApiFragmentRegistry/ApiFragmentRegistryBehavior.res.mjs";
|
|
83
86
|
import * as CommandTopicChannel_SQS_Sync$ReventlessAws from "./adapter/CommandTopic/CommandTopicChannel_SQS_Sync.res.mjs";
|
|
84
87
|
import * as EventLogSubscription_AppSync$ReventlessAws from "./adapter/EventLogSubscription/EventLogSubscription_AppSync.res.mjs";
|
|
85
88
|
import * as Platform_ApiFragments_Lambda$ReventlessAws from "./adapter/Api/Platform_ApiFragments_Lambda.res.mjs";
|
|
86
89
|
import * as UiFragmentRegistry_Behavior$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateChangeSlice/UiFragmentRegistry_Behavior.res.mjs";
|
|
87
|
-
import * as ApiFragmentRegistry_Behavior$ReventlessCore from "@reventlessdev/reventless-core/src/admin/ApiFragmentRegistry/StateChangeSlice/ApiFragmentRegistry_Behavior.res.mjs";
|
|
88
90
|
import * as CommandTopicChannel_SQS_Async$ReventlessAws from "./adapter/CommandTopic/CommandTopicChannel_SQS_Async.res.mjs";
|
|
89
91
|
import * as Plugin_ExtensionPoint_Builder$ReventlessAws from "./plugin/stack/Plugin_ExtensionPoint_Builder.res.mjs";
|
|
90
92
|
import * as QueryDbStorage_DynamoDbStream$ReventlessAws from "./adapter/QueryDb/QueryDbStorage_DynamoDbStream.res.mjs";
|
|
@@ -99,11 +101,13 @@ import * as CommandGeneratorResolvers_AppSync$ReventlessAws from "./adapter/Comm
|
|
|
99
101
|
import * as EventTopicPublisher_DynamoDbStream$ReventlessAws from "./adapter/EventTopic/EventTopicPublisher_DynamoDbStream.res.mjs";
|
|
100
102
|
import * as InboundTranslationResolvers_AppSync$ReventlessAws from "./adapter/CommandGenerator/InboundTranslationResolvers_AppSync.res.mjs";
|
|
101
103
|
import * as PluginExtensionPointRuntime_Builder$ReventlessAws from "./plugin/runtime/PluginExtensionPointRuntime_Builder.res.mjs";
|
|
104
|
+
import * as ReadModel_Builder_NoResolver_Stream$ReventlessAws from "./components/ReadModel_Builder_NoResolver_Stream.res.mjs";
|
|
102
105
|
import * as EventCollectorRuntime_Builder_Single$ReventlessAws from "./adapter/Runtime/EventCollectorRuntime_Builder_Single.res.mjs";
|
|
103
106
|
import * as Platform_ComponentDefinitions_Lambda$ReventlessAws from "./adapter/Api/Platform_ComponentDefinitions_Lambda.res.mjs";
|
|
104
107
|
import * as StateViewSliceRuntime_Builder_Single$ReventlessAws from "./adapter/Runtime/StateViewSliceRuntime_Builder_Single.res.mjs";
|
|
105
108
|
import * as AggregateRuntime_Builder_Single_Async$ReventlessAws from "./adapter/Runtime/AggregateRuntime_Builder_Single_Async.res.mjs";
|
|
106
109
|
import * as AutomationSliceRuntime_Builder_Single$ReventlessAws from "./adapter/Runtime/AutomationSliceRuntime_Builder_Single.res.mjs";
|
|
110
|
+
import * as SideEffectHandlerRuntime_Builder_Single$ReventlessAws from "./adapter/Runtime/SideEffectHandlerRuntime_Builder_Single.res.mjs";
|
|
107
111
|
|
|
108
112
|
let log = Logger$ReventlessCore.fromEnv();
|
|
109
113
|
|
|
@@ -154,7 +158,7 @@ function MakeWithConfig(Config) {
|
|
|
154
158
|
});
|
|
155
159
|
QueryDbBackend$ReventlessAws.exempt(PluginsReadModelSpec$ReventlessCore.name);
|
|
156
160
|
QueryDbBackend$ReventlessAws.exempt(UiFragments$ReventlessCore.name);
|
|
157
|
-
QueryDbBackend$ReventlessAws.exempt(
|
|
161
|
+
QueryDbBackend$ReventlessAws.exempt(ApiFragmentsReadModelSpec$ReventlessCore.name);
|
|
158
162
|
});
|
|
159
163
|
let currentDeployTarget = {
|
|
160
164
|
contents: "Domain"
|
|
@@ -459,36 +463,6 @@ function MakeWithConfig(Config) {
|
|
|
459
463
|
project: UiFragments_Projection$ReventlessCore.project,
|
|
460
464
|
moduleUrl: UiFragments_Projection$ReventlessCore.moduleUrl
|
|
461
465
|
});
|
|
462
|
-
let Spec$1 = {
|
|
463
|
-
name: ApiFragmentRegistry$ReventlessCore.name,
|
|
464
|
-
moduleUrl: ApiFragmentRegistry$ReventlessCore.moduleUrl,
|
|
465
|
-
Id: Id$Reventless.$$String,
|
|
466
|
-
consumedEventSchema: ApiFragmentRegistry$ReventlessCore.consumedEventSchema,
|
|
467
|
-
errorSchema: ApiFragmentRegistry$ReventlessCore.errorSchema,
|
|
468
|
-
eventSchema: ApiFragmentRegistry$ReventlessCore.eventSchema,
|
|
469
|
-
commandSchema: ApiFragmentRegistry$ReventlessCore.commandSchema,
|
|
470
|
-
commandAuthorization: ApiFragmentRegistry$ReventlessCore.commandAuthorization,
|
|
471
|
-
readConsistency: ApiFragmentRegistry$ReventlessCore.readConsistency
|
|
472
|
-
};
|
|
473
|
-
let ApiFragmentRegistrySlice = StateChangeSlice_Builder$ReventlessAws.Make(Spec$1)({
|
|
474
|
-
initialState: undefined,
|
|
475
|
-
evolve: ApiFragmentRegistry_Behavior$ReventlessCore.evolve,
|
|
476
|
-
decide: ApiFragmentRegistry_Behavior$ReventlessCore.decide,
|
|
477
|
-
moduleUrl: ApiFragmentRegistry_Behavior$ReventlessCore.moduleUrl
|
|
478
|
-
});
|
|
479
|
-
let ApiFragmentsViewSlice = Make$7({
|
|
480
|
-
name: ApiFragments$ReventlessCore.name,
|
|
481
|
-
moduleUrl: ApiFragments$ReventlessCore.moduleUrl,
|
|
482
|
-
stateSchema: ApiFragments$ReventlessCore.stateSchema,
|
|
483
|
-
consumedEventSchema: ApiFragments$ReventlessCore.consumedEventSchema,
|
|
484
|
-
config: ApiFragments$ReventlessCore.config,
|
|
485
|
-
subIdConfig: undefined,
|
|
486
|
-
authorization: ApiFragments$ReventlessCore.authorization,
|
|
487
|
-
visibility: ApiFragments$ReventlessCore.visibility
|
|
488
|
-
})({
|
|
489
|
-
project: ApiFragments_Projection$ReventlessCore.project,
|
|
490
|
-
moduleUrl: ApiFragments_Projection$ReventlessCore.moduleUrl
|
|
491
|
-
});
|
|
492
466
|
let emptyBaseFragment = GraphQL_Stitcher$ReventlessCore.encode({
|
|
493
467
|
types: [],
|
|
494
468
|
mutations: [],
|
|
@@ -629,7 +603,7 @@ function MakeWithConfig(Config) {
|
|
|
629
603
|
let run = async () => {
|
|
630
604
|
let at = new Date().toISOString();
|
|
631
605
|
let variables = {
|
|
632
|
-
id:
|
|
606
|
+
id: "registry",
|
|
633
607
|
pluginId: name,
|
|
634
608
|
fragment: {
|
|
635
609
|
encoded: pluginFragment.encoded,
|
|
@@ -639,8 +613,8 @@ function MakeWithConfig(Config) {
|
|
|
639
613
|
at: at
|
|
640
614
|
};
|
|
641
615
|
log.info("registerFragmentViaApi", undefined, `Registering API fragment for ` + name + ` (` + apiTargetName + `) via ` + endpoint);
|
|
642
|
-
let result = await Util_AppSync_Caller$ReventlessAws.sendMutation(endpoint, region, "
|
|
643
|
-
let outcome = Stdlib_Option.flatMap(Stdlib_Option.flatMap(Stdlib_Option.flatMap(result, Stdlib_JSON.Decode.object), d => d["
|
|
616
|
+
let result = await Util_AppSync_Caller$ReventlessAws.sendMutation(endpoint, region, "Platform_ApiFragmentRegistry_RegisterApiFragment", "{ __typename ... on CommandAccepted { eventCount } ... on CommandRejected { errorCode errorDetail } }", variables);
|
|
617
|
+
let outcome = Stdlib_Option.flatMap(Stdlib_Option.flatMap(Stdlib_Option.flatMap(result, Stdlib_JSON.Decode.object), d => d["Platform_ApiFragmentRegistry_RegisterApiFragment"]), Stdlib_JSON.Decode.object);
|
|
644
618
|
if (outcome === undefined) {
|
|
645
619
|
return await waitForApiFragmentPush(endpoint, region, name, at);
|
|
646
620
|
}
|
|
@@ -987,6 +961,40 @@ function MakeWithConfig(Config) {
|
|
|
987
961
|
authorization: PluginsReadModelSpec$ReventlessCore.authorization,
|
|
988
962
|
visibility: PluginsReadModelSpec$ReventlessCore.visibility
|
|
989
963
|
})(PluginReadModelMappings);
|
|
964
|
+
let ApiFragmentRegistryAggregate = Aggregate_Builder_Single$ReventlessAws.Make({
|
|
965
|
+
Id: Id$Reventless.$$String,
|
|
966
|
+
name: ApiFragmentRegistrySpec$ReventlessCore.name,
|
|
967
|
+
eventSchema: ApiFragmentRegistrySpec$ReventlessCore.eventSchema,
|
|
968
|
+
errorSchema: ApiFragmentRegistrySpec$ReventlessCore.errorSchema,
|
|
969
|
+
commandSchema: ApiFragmentRegistrySpec$ReventlessCore.commandSchema,
|
|
970
|
+
moduleUrl: ApiFragmentRegistrySpec$ReventlessCore.moduleUrl,
|
|
971
|
+
commandAuthorization: ApiFragmentRegistrySpec$ReventlessCore.commandAuthorization
|
|
972
|
+
})({
|
|
973
|
+
initialState: ApiFragmentRegistryBehavior$ReventlessCore.initialState,
|
|
974
|
+
evolve: ApiFragmentRegistryBehavior$ReventlessCore.evolve,
|
|
975
|
+
decide: ApiFragmentRegistryBehavior$ReventlessCore.decide,
|
|
976
|
+
snapshot: undefined,
|
|
977
|
+
moduleUrl: ApiFragmentRegistryBehavior$ReventlessCore.moduleUrl
|
|
978
|
+
})(NoEventMappings$ReventlessInfra.Make({
|
|
979
|
+
name: ApiFragmentRegistrySpec$ReventlessCore.name,
|
|
980
|
+
Id: Id$Reventless.$$String,
|
|
981
|
+
commandSchema: ApiFragmentRegistrySpec$ReventlessCore.commandSchema
|
|
982
|
+
}));
|
|
983
|
+
let ApiFragmentsReadModelMappings = {
|
|
984
|
+
moduleUrl: ApiFragmentsProjection$ReventlessCore.moduleUrl,
|
|
985
|
+
mappings: ApiFragmentsProjection$ReventlessCore.mappings
|
|
986
|
+
};
|
|
987
|
+
let ApiFragmentsReadModel = ReadModel_Builder_NoResolver_Stream$ReventlessAws.Make({
|
|
988
|
+
Id: Id$Reventless.$$String,
|
|
989
|
+
name: ApiFragmentsReadModelSpec$ReventlessCore.name,
|
|
990
|
+
moduleUrl: ApiFragmentsReadModelSpec$ReventlessCore.moduleUrl,
|
|
991
|
+
stateSchema: ApiFragmentsReadModelSpec$ReventlessCore.stateSchema,
|
|
992
|
+
config: ApiFragmentsReadModelSpec$ReventlessCore.config,
|
|
993
|
+
subIdConfig: undefined,
|
|
994
|
+
authorization: ApiFragmentsReadModelSpec$ReventlessCore.authorization,
|
|
995
|
+
visibility: ApiFragmentsReadModelSpec$ReventlessCore.visibility
|
|
996
|
+
})(ApiFragmentsReadModelMappings);
|
|
997
|
+
let AdminApiSchemaPushHandler = SideEffectHandler_Single$ReventlessAws.Make({});
|
|
990
998
|
let makeScheduler = () => {
|
|
991
999
|
let component = Scheduler$ReventlessAws.make(undefined);
|
|
992
1000
|
let outputs = Component$ReventlessCore.outputs(component);
|
|
@@ -1118,13 +1126,13 @@ function MakeWithConfig(Config) {
|
|
|
1118
1126
|
};
|
|
1119
1127
|
}
|
|
1120
1128
|
}
|
|
1121
|
-
let admin = Admin.construct(version, [], [
|
|
1122
|
-
|
|
1123
|
-
|
|
1129
|
+
let admin = Admin.construct(version, [], [
|
|
1130
|
+
PluginAggregate,
|
|
1131
|
+
ApiFragmentRegistryAggregate
|
|
1124
1132
|
], [
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
], [], [], []);
|
|
1133
|
+
PluginReadModel,
|
|
1134
|
+
ApiFragmentsReadModel
|
|
1135
|
+
], scheduler, Util_ResourceNaming$ReventlessAws.operations, platformApi, platformApiRole, [UiFragmentRegistrySlice], [UiFragmentsViewSlice], [], [], []);
|
|
1128
1136
|
let pluginRm = admin.readModelsOutputs["Plugins"];
|
|
1129
1137
|
if (pluginRm !== undefined) {
|
|
1130
1138
|
let r = pluginRm.queryDb.resources[0];
|
|
@@ -1140,7 +1148,7 @@ function MakeWithConfig(Config) {
|
|
|
1140
1148
|
Platform_UIFragments_Lambda$ReventlessAws.make(platformApi, r$1.name, admin.adminSchemaPushed, {});
|
|
1141
1149
|
}
|
|
1142
1150
|
}
|
|
1143
|
-
let rm$1 = admin.
|
|
1151
|
+
let rm$1 = admin.readModelsOutputs["ApiFragments"];
|
|
1144
1152
|
if (rm$1 !== undefined) {
|
|
1145
1153
|
let r$2 = rm$1.queryDb.resources[0];
|
|
1146
1154
|
if (r$2 !== undefined) {
|
|
@@ -1233,13 +1241,61 @@ function MakeWithConfig(Config) {
|
|
|
1233
1241
|
updateApiSchema: updateApiSchema,
|
|
1234
1242
|
manageSubscriptions: undefined
|
|
1235
1243
|
});
|
|
1236
|
-
let admin = Admin.construct(version, [PluginExtensionPoint], [
|
|
1237
|
-
|
|
1238
|
-
|
|
1244
|
+
let admin = Admin.construct(version, [PluginExtensionPoint], [
|
|
1245
|
+
PluginAggregate,
|
|
1246
|
+
ApiFragmentRegistryAggregate
|
|
1239
1247
|
], [
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
], [], [], []);
|
|
1248
|
+
PluginReadModel,
|
|
1249
|
+
ApiFragmentsReadModel
|
|
1250
|
+
], scheduler, Util_ResourceNaming$ReventlessAws.operations, platformApi, platformApiRole, [UiFragmentRegistrySlice], [UiFragmentsViewSlice], [], [], []);
|
|
1251
|
+
let apiSchemaPushEventTopics = Aggregate$ReventlessCore.allEventTopics(admin.aggregatesOutputs);
|
|
1252
|
+
let apiSchemaPushCmdTopics = Aggregate$ReventlessCore.allCommandTopics(admin.aggregatesOutputs);
|
|
1253
|
+
let apiSchemaPushCmdTopicUrl = Stdlib_Option.getOr(Stdlib_Option.map(admin.aggregatesOutputs[ApiFragmentRegistrySpec$ReventlessCore.name], agg => Output$Pulumi.flatMap(agg.commandTopic, ct => {
|
|
1254
|
+
let r = ct.resources[0];
|
|
1255
|
+
if (r !== undefined) {
|
|
1256
|
+
return r.id;
|
|
1257
|
+
} else {
|
|
1258
|
+
return Pulumi.output("");
|
|
1259
|
+
}
|
|
1260
|
+
})), Pulumi.output(""));
|
|
1261
|
+
let apiSchemaPushEnv = Object.fromEntries([
|
|
1262
|
+
[
|
|
1263
|
+
"API_SCHEMA_PUSH_DOMAIN_API_ID",
|
|
1264
|
+
domainApiId
|
|
1265
|
+
],
|
|
1266
|
+
[
|
|
1267
|
+
"API_SCHEMA_PUSH_PLATFORM_API_ID",
|
|
1268
|
+
Output$Pulumi.flatMap(platformApi, api => api.id)
|
|
1269
|
+
],
|
|
1270
|
+
[
|
|
1271
|
+
"API_SCHEMA_PUSH_SPLIT_API",
|
|
1272
|
+
Pulumi.output(Config.splitApi ? "true" : "false")
|
|
1273
|
+
],
|
|
1274
|
+
[
|
|
1275
|
+
"API_SCHEMA_PUSH_CLONER",
|
|
1276
|
+
Pulumi.output(Config.cloner ? "true" : "false")
|
|
1277
|
+
],
|
|
1278
|
+
[
|
|
1279
|
+
"API_SCHEMA_PUSH_CMD_TOPIC_URL",
|
|
1280
|
+
apiSchemaPushCmdTopicUrl
|
|
1281
|
+
]
|
|
1282
|
+
]);
|
|
1283
|
+
let apiSchemaPushQueryEngine = QueryEngine_DynamoDb$ReventlessAws.make({});
|
|
1284
|
+
Pulumi.all([
|
|
1285
|
+
scheduler,
|
|
1286
|
+
apiSchemaPushQueryEngine
|
|
1287
|
+
]).apply(param => {
|
|
1288
|
+
AdminApiSchemaPushHandler.make("AdminApiSchemaPush", [{
|
|
1289
|
+
Source: {
|
|
1290
|
+
name: ApiFragmentRegistrySpec$ReventlessCore.name,
|
|
1291
|
+
Id: Id$Reventless.$$String,
|
|
1292
|
+
eventSchema: ApiFragmentRegistrySpec$ReventlessCore.eventSchema
|
|
1293
|
+
},
|
|
1294
|
+
moduleUrl: ApiSchemaPush$ReventlessAws.moduleUrl,
|
|
1295
|
+
execute: ApiSchemaPush$ReventlessAws.execute
|
|
1296
|
+
}], apiSchemaPushEventTopics, apiSchemaPushCmdTopics, [ApiFragmentRegistrySpec$ReventlessCore.name], param[1], param[0], Util_ResourceNaming$ReventlessAws.operations, undefined, undefined, apiSchemaPushEnv, {});
|
|
1297
|
+
apiSchemaPushCmdTopics.apply(param => SideEffectHandlerRuntime_Builder_Single$ReventlessAws.finish());
|
|
1298
|
+
});
|
|
1243
1299
|
let pluginRm = admin.readModelsOutputs["Plugins"];
|
|
1244
1300
|
let pluginReadModelTableName;
|
|
1245
1301
|
if (pluginRm !== undefined) {
|
|
@@ -1268,7 +1324,7 @@ function MakeWithConfig(Config) {
|
|
|
1268
1324
|
return Pulumi.output("NOT_AVAILABLE");
|
|
1269
1325
|
}
|
|
1270
1326
|
});
|
|
1271
|
-
let r$1 = Stdlib_Option.flatMap(admin.
|
|
1327
|
+
let r$1 = Stdlib_Option.flatMap(admin.readModelsOutputs["ApiFragments"], rm => rm.queryDb.resources[0]);
|
|
1272
1328
|
PluginRuntime_Builder$ReventlessAws.registerConfig(pluginEpEventTopicArn, pluginReadModelTableName, pluginSchemaPersistenceTable.name, hooks_schedulerRoleUrn.contents, undefined, undefined, domainApiId, Config.cloner, Output$Pulumi.flatMap(platformApi, api => api.id), r$1 !== undefined ? r$1.name : undefined, AutomationSliceRuntime_Builder_Single$ReventlessAws.getDcbQueueUrl(), Config.splitApi, undefined);
|
|
1273
1329
|
if (pluginReadModelTableName !== undefined) {
|
|
1274
1330
|
AggregateRuntime_Builder_Single$ReventlessAws.setPluginReadModelTable(pluginReadModelTableName);
|
|
@@ -1281,7 +1337,7 @@ function MakeWithConfig(Config) {
|
|
|
1281
1337
|
Platform_UIFragments_Lambda$ReventlessAws.make(platformApi, r$2.name, admin.adminSchemaPushed, {});
|
|
1282
1338
|
}
|
|
1283
1339
|
}
|
|
1284
|
-
let rm$1 = admin.
|
|
1340
|
+
let rm$1 = admin.readModelsOutputs["ApiFragments"];
|
|
1285
1341
|
if (rm$1 !== undefined) {
|
|
1286
1342
|
let r$3 = rm$1.queryDb.resources[0];
|
|
1287
1343
|
if (r$3 !== undefined) {
|
|
@@ -1544,7 +1600,7 @@ function Make($star) {
|
|
|
1544
1600
|
});
|
|
1545
1601
|
QueryDbBackend$ReventlessAws.exempt(PluginsReadModelSpec$ReventlessCore.name);
|
|
1546
1602
|
QueryDbBackend$ReventlessAws.exempt(UiFragments$ReventlessCore.name);
|
|
1547
|
-
QueryDbBackend$ReventlessAws.exempt(
|
|
1603
|
+
QueryDbBackend$ReventlessAws.exempt(ApiFragmentsReadModelSpec$ReventlessCore.name);
|
|
1548
1604
|
});
|
|
1549
1605
|
let currentDeployTarget = {
|
|
1550
1606
|
contents: "Domain"
|
|
@@ -1849,36 +1905,6 @@ function Make($star) {
|
|
|
1849
1905
|
project: UiFragments_Projection$ReventlessCore.project,
|
|
1850
1906
|
moduleUrl: UiFragments_Projection$ReventlessCore.moduleUrl
|
|
1851
1907
|
});
|
|
1852
|
-
let Spec$1 = {
|
|
1853
|
-
name: ApiFragmentRegistry$ReventlessCore.name,
|
|
1854
|
-
moduleUrl: ApiFragmentRegistry$ReventlessCore.moduleUrl,
|
|
1855
|
-
Id: Id$Reventless.$$String,
|
|
1856
|
-
consumedEventSchema: ApiFragmentRegistry$ReventlessCore.consumedEventSchema,
|
|
1857
|
-
errorSchema: ApiFragmentRegistry$ReventlessCore.errorSchema,
|
|
1858
|
-
eventSchema: ApiFragmentRegistry$ReventlessCore.eventSchema,
|
|
1859
|
-
commandSchema: ApiFragmentRegistry$ReventlessCore.commandSchema,
|
|
1860
|
-
commandAuthorization: ApiFragmentRegistry$ReventlessCore.commandAuthorization,
|
|
1861
|
-
readConsistency: ApiFragmentRegistry$ReventlessCore.readConsistency
|
|
1862
|
-
};
|
|
1863
|
-
let ApiFragmentRegistrySlice = StateChangeSlice_Builder$ReventlessAws.Make(Spec$1)({
|
|
1864
|
-
initialState: undefined,
|
|
1865
|
-
evolve: ApiFragmentRegistry_Behavior$ReventlessCore.evolve,
|
|
1866
|
-
decide: ApiFragmentRegistry_Behavior$ReventlessCore.decide,
|
|
1867
|
-
moduleUrl: ApiFragmentRegistry_Behavior$ReventlessCore.moduleUrl
|
|
1868
|
-
});
|
|
1869
|
-
let ApiFragmentsViewSlice = Make$8({
|
|
1870
|
-
name: ApiFragments$ReventlessCore.name,
|
|
1871
|
-
moduleUrl: ApiFragments$ReventlessCore.moduleUrl,
|
|
1872
|
-
stateSchema: ApiFragments$ReventlessCore.stateSchema,
|
|
1873
|
-
consumedEventSchema: ApiFragments$ReventlessCore.consumedEventSchema,
|
|
1874
|
-
config: ApiFragments$ReventlessCore.config,
|
|
1875
|
-
subIdConfig: undefined,
|
|
1876
|
-
authorization: ApiFragments$ReventlessCore.authorization,
|
|
1877
|
-
visibility: ApiFragments$ReventlessCore.visibility
|
|
1878
|
-
})({
|
|
1879
|
-
project: ApiFragments_Projection$ReventlessCore.project,
|
|
1880
|
-
moduleUrl: ApiFragments_Projection$ReventlessCore.moduleUrl
|
|
1881
|
-
});
|
|
1882
1908
|
let emptyBaseFragment = GraphQL_Stitcher$ReventlessCore.encode({
|
|
1883
1909
|
types: [],
|
|
1884
1910
|
mutations: [],
|
|
@@ -2018,7 +2044,7 @@ function Make($star) {
|
|
|
2018
2044
|
let run = async () => {
|
|
2019
2045
|
let at = new Date().toISOString();
|
|
2020
2046
|
let variables = {
|
|
2021
|
-
id:
|
|
2047
|
+
id: "registry",
|
|
2022
2048
|
pluginId: name,
|
|
2023
2049
|
fragment: {
|
|
2024
2050
|
encoded: pluginFragment.encoded,
|
|
@@ -2028,8 +2054,8 @@ function Make($star) {
|
|
|
2028
2054
|
at: at
|
|
2029
2055
|
};
|
|
2030
2056
|
log.info("registerFragmentViaApi", undefined, `Registering API fragment for ` + name + ` (` + apiTargetName + `) via ` + endpoint);
|
|
2031
|
-
let result = await Util_AppSync_Caller$ReventlessAws.sendMutation(endpoint, region, "
|
|
2032
|
-
let outcome = Stdlib_Option.flatMap(Stdlib_Option.flatMap(Stdlib_Option.flatMap(result, Stdlib_JSON.Decode.object), d => d["
|
|
2057
|
+
let result = await Util_AppSync_Caller$ReventlessAws.sendMutation(endpoint, region, "Platform_ApiFragmentRegistry_RegisterApiFragment", "{ __typename ... on CommandAccepted { eventCount } ... on CommandRejected { errorCode errorDetail } }", variables);
|
|
2058
|
+
let outcome = Stdlib_Option.flatMap(Stdlib_Option.flatMap(Stdlib_Option.flatMap(result, Stdlib_JSON.Decode.object), d => d["Platform_ApiFragmentRegistry_RegisterApiFragment"]), Stdlib_JSON.Decode.object);
|
|
2033
2059
|
if (outcome === undefined) {
|
|
2034
2060
|
return await waitForApiFragmentPush(endpoint, region, name, at);
|
|
2035
2061
|
}
|
|
@@ -2372,6 +2398,40 @@ function Make($star) {
|
|
|
2372
2398
|
authorization: PluginsReadModelSpec$ReventlessCore.authorization,
|
|
2373
2399
|
visibility: PluginsReadModelSpec$ReventlessCore.visibility
|
|
2374
2400
|
})(PluginReadModelMappings);
|
|
2401
|
+
let ApiFragmentRegistryAggregate = Aggregate_Builder_Single$ReventlessAws.Make({
|
|
2402
|
+
Id: Id$Reventless.$$String,
|
|
2403
|
+
name: ApiFragmentRegistrySpec$ReventlessCore.name,
|
|
2404
|
+
eventSchema: ApiFragmentRegistrySpec$ReventlessCore.eventSchema,
|
|
2405
|
+
errorSchema: ApiFragmentRegistrySpec$ReventlessCore.errorSchema,
|
|
2406
|
+
commandSchema: ApiFragmentRegistrySpec$ReventlessCore.commandSchema,
|
|
2407
|
+
moduleUrl: ApiFragmentRegistrySpec$ReventlessCore.moduleUrl,
|
|
2408
|
+
commandAuthorization: ApiFragmentRegistrySpec$ReventlessCore.commandAuthorization
|
|
2409
|
+
})({
|
|
2410
|
+
initialState: ApiFragmentRegistryBehavior$ReventlessCore.initialState,
|
|
2411
|
+
evolve: ApiFragmentRegistryBehavior$ReventlessCore.evolve,
|
|
2412
|
+
decide: ApiFragmentRegistryBehavior$ReventlessCore.decide,
|
|
2413
|
+
snapshot: undefined,
|
|
2414
|
+
moduleUrl: ApiFragmentRegistryBehavior$ReventlessCore.moduleUrl
|
|
2415
|
+
})(NoEventMappings$ReventlessInfra.Make({
|
|
2416
|
+
name: ApiFragmentRegistrySpec$ReventlessCore.name,
|
|
2417
|
+
Id: Id$Reventless.$$String,
|
|
2418
|
+
commandSchema: ApiFragmentRegistrySpec$ReventlessCore.commandSchema
|
|
2419
|
+
}));
|
|
2420
|
+
let ApiFragmentsReadModelMappings = {
|
|
2421
|
+
moduleUrl: ApiFragmentsProjection$ReventlessCore.moduleUrl,
|
|
2422
|
+
mappings: ApiFragmentsProjection$ReventlessCore.mappings
|
|
2423
|
+
};
|
|
2424
|
+
let ApiFragmentsReadModel = ReadModel_Builder_NoResolver_Stream$ReventlessAws.Make({
|
|
2425
|
+
Id: Id$Reventless.$$String,
|
|
2426
|
+
name: ApiFragmentsReadModelSpec$ReventlessCore.name,
|
|
2427
|
+
moduleUrl: ApiFragmentsReadModelSpec$ReventlessCore.moduleUrl,
|
|
2428
|
+
stateSchema: ApiFragmentsReadModelSpec$ReventlessCore.stateSchema,
|
|
2429
|
+
config: ApiFragmentsReadModelSpec$ReventlessCore.config,
|
|
2430
|
+
subIdConfig: undefined,
|
|
2431
|
+
authorization: ApiFragmentsReadModelSpec$ReventlessCore.authorization,
|
|
2432
|
+
visibility: ApiFragmentsReadModelSpec$ReventlessCore.visibility
|
|
2433
|
+
})(ApiFragmentsReadModelMappings);
|
|
2434
|
+
let AdminApiSchemaPushHandler = SideEffectHandler_Single$ReventlessAws.Make({});
|
|
2375
2435
|
let makeScheduler = () => {
|
|
2376
2436
|
let component = Scheduler$ReventlessAws.make(undefined);
|
|
2377
2437
|
let outputs = Component$ReventlessCore.outputs(component);
|
|
@@ -2498,13 +2558,13 @@ function Make($star) {
|
|
|
2498
2558
|
platformApiRole: platformApiRole
|
|
2499
2559
|
};
|
|
2500
2560
|
}
|
|
2501
|
-
let admin = Admin.construct(version, [], [
|
|
2502
|
-
|
|
2503
|
-
|
|
2561
|
+
let admin = Admin.construct(version, [], [
|
|
2562
|
+
PluginAggregate,
|
|
2563
|
+
ApiFragmentRegistryAggregate
|
|
2504
2564
|
], [
|
|
2505
|
-
|
|
2506
|
-
|
|
2507
|
-
], [], [], []);
|
|
2565
|
+
PluginReadModel,
|
|
2566
|
+
ApiFragmentsReadModel
|
|
2567
|
+
], scheduler, Util_ResourceNaming$ReventlessAws.operations, platformApi, platformApiRole, [UiFragmentRegistrySlice], [UiFragmentsViewSlice], [], [], []);
|
|
2508
2568
|
let pluginRm = admin.readModelsOutputs["Plugins"];
|
|
2509
2569
|
if (pluginRm !== undefined) {
|
|
2510
2570
|
let r = pluginRm.queryDb.resources[0];
|
|
@@ -2520,7 +2580,7 @@ function Make($star) {
|
|
|
2520
2580
|
Platform_UIFragments_Lambda$ReventlessAws.make(platformApi, r$1.name, admin.adminSchemaPushed, {});
|
|
2521
2581
|
}
|
|
2522
2582
|
}
|
|
2523
|
-
let rm$1 = admin.
|
|
2583
|
+
let rm$1 = admin.readModelsOutputs["ApiFragments"];
|
|
2524
2584
|
if (rm$1 !== undefined) {
|
|
2525
2585
|
let r$2 = rm$1.queryDb.resources[0];
|
|
2526
2586
|
if (r$2 !== undefined) {
|
|
@@ -2601,13 +2661,61 @@ function Make($star) {
|
|
|
2601
2661
|
updateApiSchema: updateApiSchema,
|
|
2602
2662
|
manageSubscriptions: undefined
|
|
2603
2663
|
});
|
|
2604
|
-
let admin = Admin.construct(version, [PluginExtensionPoint], [
|
|
2605
|
-
|
|
2606
|
-
|
|
2664
|
+
let admin = Admin.construct(version, [PluginExtensionPoint], [
|
|
2665
|
+
PluginAggregate,
|
|
2666
|
+
ApiFragmentRegistryAggregate
|
|
2607
2667
|
], [
|
|
2608
|
-
|
|
2609
|
-
|
|
2610
|
-
], [], [], []);
|
|
2668
|
+
PluginReadModel,
|
|
2669
|
+
ApiFragmentsReadModel
|
|
2670
|
+
], scheduler, Util_ResourceNaming$ReventlessAws.operations, platformApi, platformApiRole, [UiFragmentRegistrySlice], [UiFragmentsViewSlice], [], [], []);
|
|
2671
|
+
let apiSchemaPushEventTopics = Aggregate$ReventlessCore.allEventTopics(admin.aggregatesOutputs);
|
|
2672
|
+
let apiSchemaPushCmdTopics = Aggregate$ReventlessCore.allCommandTopics(admin.aggregatesOutputs);
|
|
2673
|
+
let apiSchemaPushCmdTopicUrl = Stdlib_Option.getOr(Stdlib_Option.map(admin.aggregatesOutputs[ApiFragmentRegistrySpec$ReventlessCore.name], agg => Output$Pulumi.flatMap(agg.commandTopic, ct => {
|
|
2674
|
+
let r = ct.resources[0];
|
|
2675
|
+
if (r !== undefined) {
|
|
2676
|
+
return r.id;
|
|
2677
|
+
} else {
|
|
2678
|
+
return Pulumi.output("");
|
|
2679
|
+
}
|
|
2680
|
+
})), Pulumi.output(""));
|
|
2681
|
+
let apiSchemaPushEnv = Object.fromEntries([
|
|
2682
|
+
[
|
|
2683
|
+
"API_SCHEMA_PUSH_DOMAIN_API_ID",
|
|
2684
|
+
domainApiId
|
|
2685
|
+
],
|
|
2686
|
+
[
|
|
2687
|
+
"API_SCHEMA_PUSH_PLATFORM_API_ID",
|
|
2688
|
+
Output$Pulumi.flatMap(platformApi, api => api.id)
|
|
2689
|
+
],
|
|
2690
|
+
[
|
|
2691
|
+
"API_SCHEMA_PUSH_SPLIT_API",
|
|
2692
|
+
Pulumi.output("true")
|
|
2693
|
+
],
|
|
2694
|
+
[
|
|
2695
|
+
"API_SCHEMA_PUSH_CLONER",
|
|
2696
|
+
Pulumi.output("false")
|
|
2697
|
+
],
|
|
2698
|
+
[
|
|
2699
|
+
"API_SCHEMA_PUSH_CMD_TOPIC_URL",
|
|
2700
|
+
apiSchemaPushCmdTopicUrl
|
|
2701
|
+
]
|
|
2702
|
+
]);
|
|
2703
|
+
let apiSchemaPushQueryEngine = QueryEngine_DynamoDb$ReventlessAws.make({});
|
|
2704
|
+
Pulumi.all([
|
|
2705
|
+
scheduler,
|
|
2706
|
+
apiSchemaPushQueryEngine
|
|
2707
|
+
]).apply(param => {
|
|
2708
|
+
AdminApiSchemaPushHandler.make("AdminApiSchemaPush", [{
|
|
2709
|
+
Source: {
|
|
2710
|
+
name: ApiFragmentRegistrySpec$ReventlessCore.name,
|
|
2711
|
+
Id: Id$Reventless.$$String,
|
|
2712
|
+
eventSchema: ApiFragmentRegistrySpec$ReventlessCore.eventSchema
|
|
2713
|
+
},
|
|
2714
|
+
moduleUrl: ApiSchemaPush$ReventlessAws.moduleUrl,
|
|
2715
|
+
execute: ApiSchemaPush$ReventlessAws.execute
|
|
2716
|
+
}], apiSchemaPushEventTopics, apiSchemaPushCmdTopics, [ApiFragmentRegistrySpec$ReventlessCore.name], param[1], param[0], Util_ResourceNaming$ReventlessAws.operations, undefined, undefined, apiSchemaPushEnv, {});
|
|
2717
|
+
apiSchemaPushCmdTopics.apply(param => SideEffectHandlerRuntime_Builder_Single$ReventlessAws.finish());
|
|
2718
|
+
});
|
|
2611
2719
|
let pluginRm = admin.readModelsOutputs["Plugins"];
|
|
2612
2720
|
let pluginReadModelTableName;
|
|
2613
2721
|
if (pluginRm !== undefined) {
|
|
@@ -2636,7 +2744,7 @@ function Make($star) {
|
|
|
2636
2744
|
return Pulumi.output("NOT_AVAILABLE");
|
|
2637
2745
|
}
|
|
2638
2746
|
});
|
|
2639
|
-
let r$1 = Stdlib_Option.flatMap(admin.
|
|
2747
|
+
let r$1 = Stdlib_Option.flatMap(admin.readModelsOutputs["ApiFragments"], rm => rm.queryDb.resources[0]);
|
|
2640
2748
|
PluginRuntime_Builder$ReventlessAws.registerConfig(pluginEpEventTopicArn, pluginReadModelTableName, pluginSchemaPersistenceTable.name, hooks_schedulerRoleUrn.contents, undefined, undefined, domainApiId, false, Output$Pulumi.flatMap(platformApi, api => api.id), r$1 !== undefined ? r$1.name : undefined, AutomationSliceRuntime_Builder_Single$ReventlessAws.getDcbQueueUrl(), true, undefined);
|
|
2641
2749
|
if (pluginReadModelTableName !== undefined) {
|
|
2642
2750
|
AggregateRuntime_Builder_Single$ReventlessAws.setPluginReadModelTable(pluginReadModelTableName);
|
|
@@ -2649,7 +2757,7 @@ function Make($star) {
|
|
|
2649
2757
|
Platform_UIFragments_Lambda$ReventlessAws.make(platformApi, r$2.name, admin.adminSchemaPushed, {});
|
|
2650
2758
|
}
|
|
2651
2759
|
}
|
|
2652
|
-
let rm$1 = admin.
|
|
2760
|
+
let rm$1 = admin.readModelsOutputs["ApiFragments"];
|
|
2653
2761
|
if (rm$1 !== undefined) {
|
|
2654
2762
|
let r$3 = rm$1.queryDb.resources[0];
|
|
2655
2763
|
if (r$3 !== undefined) {
|
|
@@ -44,7 +44,7 @@ let decodeId = (id: string): option<providerInputs> =>
|
|
|
44
44
|
let sendDeregister: (JSON.t, string, string) => promise<unit> = %raw(`
|
|
45
45
|
async function (variables, endpoint, region) {
|
|
46
46
|
const mod = await import("@reventlessdev/reventless-aws/src/util/Util_AppSync_Caller.res.mjs");
|
|
47
|
-
await mod.sendMutation(endpoint, region, "
|
|
47
|
+
await mod.sendMutation(endpoint, region, "Platform_ApiFragmentRegistry_DeregisterApiFragment", "{ __typename }", variables);
|
|
48
48
|
}
|
|
49
49
|
`)
|
|
50
50
|
|
|
@@ -75,9 +75,10 @@ let delete_ = async (id: string, props: providerInputs): unit => {
|
|
|
75
75
|
}
|
|
76
76
|
let variables =
|
|
77
77
|
Dict.fromArray([
|
|
78
|
-
//
|
|
79
|
-
//
|
|
80
|
-
(
|
|
78
|
+
// Platform_ApiFragmentRegistry_DeregisterApiFragment(id: ID!, pluginId: ID!) — the
|
|
79
|
+
// registry is a SINGLETON aggregate, so `id` is the fixed constant; `pluginId`
|
|
80
|
+
// (payload) names the plugin whose fragment is removed.
|
|
81
|
+
("id", JSON.Encode.string("registry")),
|
|
81
82
|
("pluginId", JSON.Encode.string(carrier.pluginId)),
|
|
82
83
|
])->JSON.Encode.object
|
|
83
84
|
// Best-effort: on a full teardown the platform API may already be gone, and a
|
|
@@ -27,7 +27,7 @@ function decodeId(id) {
|
|
|
27
27
|
|
|
28
28
|
let sendDeregister = (async function (variables, endpoint, region) {
|
|
29
29
|
const mod = await import("@reventlessdev/reventless-aws/src/util/Util_AppSync_Caller.res.mjs");
|
|
30
|
-
await mod.sendMutation(endpoint, region, "
|
|
30
|
+
await mod.sendMutation(endpoint, region, "Platform_ApiFragmentRegistry_DeregisterApiFragment", "{ __typename }", variables);
|
|
31
31
|
});
|
|
32
32
|
|
|
33
33
|
let errMessage = ((e) => (e && e.message) ? String(e.message) : String(e));
|
|
@@ -59,7 +59,7 @@ async function delete_(id, props) {
|
|
|
59
59
|
let variables = Object.fromEntries([
|
|
60
60
|
[
|
|
61
61
|
"id",
|
|
62
|
-
|
|
62
|
+
"registry"
|
|
63
63
|
],
|
|
64
64
|
[
|
|
65
65
|
"pluginId",
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
// ApiSchemaPush — the admin reactive schema-push SideEffect
|
|
2
|
+
// (docs/plans/event-sourced-fragment-registries.md § Reactive writer design).
|
|
3
|
+
//
|
|
4
|
+
// Source = the ApiFragmentRegistry singleton aggregate. On every ApiSchemaComputed
|
|
5
|
+
// { snapshot } (emitted by the aggregate behaviour alongside each ApiFragment* fact,
|
|
6
|
+
// carrying the WHOLE consistent per-plugin fragment set), this hands the snapshot to
|
|
7
|
+
// the runtime-pure push engine (ApiSchemaPush_Runtime.mjs), which stitches one
|
|
8
|
+
// AWS-decorated schema per target API, pushes each behind the shrink guard, and writes
|
|
9
|
+
// the outcome back via RecordApiFragmentPush.
|
|
10
|
+
//
|
|
11
|
+
// The generic SideEffect.T context (`queryEngine`) is unused: this bespoke platform
|
|
12
|
+
// side effect self-acquires its config (API ids, split flag, command-topic URL) from
|
|
13
|
+
// Lambda env injected by the admin SideEffectHandler (~extraEnvVars). The push module
|
|
14
|
+
// is loaded via dynamic import so no @aws-sdk / provider code is statically captured
|
|
15
|
+
// beyond what the SideEffectHandler Lambda already bundles (runtime-purity — see
|
|
16
|
+
// reference_pulumi_leaks_into_lambda_runtime_graph).
|
|
17
|
+
module Source = ReventlessCore.ApiFragmentRegistrySpec
|
|
18
|
+
|
|
19
|
+
let moduleUrl: string = %raw(`import.meta.url`)
|
|
20
|
+
|
|
21
|
+
type jsEntry = {pluginId: string, encoded: string, protocol: string, apiTarget: string}
|
|
22
|
+
|
|
23
|
+
let pushApiSchema: array<jsEntry> => promise<unit> = %raw(`
|
|
24
|
+
async function (snapshot) {
|
|
25
|
+
const mod = await import("@reventlessdev/reventless-aws/src/adapter/Runtime/ApiSchemaPush_Runtime.mjs");
|
|
26
|
+
await mod.pushApiSchema(snapshot);
|
|
27
|
+
}
|
|
28
|
+
`)
|
|
29
|
+
|
|
30
|
+
let execute = async (
|
|
31
|
+
_id: Source.Id.t,
|
|
32
|
+
_meta: Reventless.Message.meta,
|
|
33
|
+
event: Source.event,
|
|
34
|
+
_queryEngine: Reventless.QueryEngine.operations,
|
|
35
|
+
) =>
|
|
36
|
+
switch event {
|
|
37
|
+
| ApiSchemaComputed({snapshot}) =>
|
|
38
|
+
let jsSnapshot = snapshot->Array.map((e: Source.fragmentSnapshotEntry) => {
|
|
39
|
+
pluginId: e.pluginId,
|
|
40
|
+
encoded: e.encoded,
|
|
41
|
+
protocol: e.protocol,
|
|
42
|
+
apiTarget: switch e.apiTarget {
|
|
43
|
+
| Reventless.Plugin.Domain => "Domain"
|
|
44
|
+
| Reventless.Plugin.Platform => "Platform"
|
|
45
|
+
},
|
|
46
|
+
})
|
|
47
|
+
await pushApiSchema(jsSnapshot)
|
|
48
|
+
// Fact events are handled via the ApiSchemaComputed echo (which carries the
|
|
49
|
+
// consistent snapshot); the write-back and lifecycle facts are no-ops here.
|
|
50
|
+
| ApiFragmentRegistered(_)
|
|
51
|
+
| ApiFragmentUpdated(_)
|
|
52
|
+
| ApiFragmentDeregistered(_)
|
|
53
|
+
| ApiFragmentPushRecorded(_) => ()
|
|
54
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
let moduleUrl = import.meta.url;
|
|
5
|
+
|
|
6
|
+
let pushApiSchema = (async function (snapshot) {
|
|
7
|
+
const mod = await import("@reventlessdev/reventless-aws/src/adapter/Runtime/ApiSchemaPush_Runtime.mjs");
|
|
8
|
+
await mod.pushApiSchema(snapshot);
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
async function execute(_id, _meta, event, _queryEngine) {
|
|
12
|
+
if (event.TAG !== "ApiSchemaComputed") {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
let jsSnapshot = event.snapshot.map(e => {
|
|
16
|
+
let match = e.apiTarget;
|
|
17
|
+
let tmp;
|
|
18
|
+
tmp = match === "Domain" ? "Domain" : "Platform";
|
|
19
|
+
return {
|
|
20
|
+
pluginId: e.pluginId,
|
|
21
|
+
encoded: e.encoded,
|
|
22
|
+
protocol: e.protocol,
|
|
23
|
+
apiTarget: tmp
|
|
24
|
+
};
|
|
25
|
+
});
|
|
26
|
+
return await pushApiSchema(jsSnapshot);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
let Source;
|
|
30
|
+
|
|
31
|
+
export {
|
|
32
|
+
Source,
|
|
33
|
+
moduleUrl,
|
|
34
|
+
pushApiSchema,
|
|
35
|
+
execute,
|
|
36
|
+
}
|
|
37
|
+
/* moduleUrl Not a pure module */
|