@reventlessdev/reventless-aws 3.0.0-alpha.209 → 3.0.0-alpha.210
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 +9 -0
- package/package.json +7 -7
- package/src/Platform.res +445 -71
- package/src/Platform.res.mjs +318 -151
- package/src/components/Api/AppSync_Adapter.res +144 -10
- package/src/components/Api/AppSync_Adapter.res.mjs +62 -7
- package/src/components/Api/AppSync_MergedApi.res +218 -0
- package/src/components/Api/AppSync_MergedApi.res.mjs +122 -0
- package/src/components/Api/AppSync_SdlDecorate.res +47 -0
- package/src/components/Api/AppSync_SdlDecorate.res.mjs +39 -0
- package/tests/AppSync_AdapterTest.res +176 -0
- package/tests/AppSync_AdapterTest.res.mjs +134 -0
- package/tests/AppSync_SdlDecorateTest.res +27 -0
- package/tests/AppSync_SdlDecorateTest.res.mjs +20 -0
package/src/Platform.res.mjs
CHANGED
|
@@ -42,6 +42,7 @@ import * as PgProjectionFeed$ReventlessAws from "./adapter/Postgres/PgProjection
|
|
|
42
42
|
import * as Util_LocalConfig$ReventlessAws from "./util/Util_LocalConfig.res.mjs";
|
|
43
43
|
import * as IndexJs from "@pulumi/pulumi/runtime/index.js";
|
|
44
44
|
import * as AppSync_EventsApi$ReventlessAws from "./adapter/Api/AppSync_EventsApi.res.mjs";
|
|
45
|
+
import * as AppSync_MergedApi$ReventlessAws from "./components/Api/AppSync_MergedApi.res.mjs";
|
|
45
46
|
import * as GraphQL_Stitcher$ReventlessCore from "@reventlessdev/reventless-core/src/components/Api/GraphQL_Stitcher.res.mjs";
|
|
46
47
|
import * as NoEventMappings$ReventlessInfra from "@reventlessdev/reventless-infra/src/types/NoEventMappings.res.mjs";
|
|
47
48
|
import * as Util_HostUiDomain$ReventlessAws from "./util/Util_HostUiDomain.res.mjs";
|
|
@@ -49,6 +50,7 @@ import * as DcbEventLogStorage$ReventlessAws from "./adapter/DcbEventLog/DcbEven
|
|
|
49
50
|
import * as ExtensionMapping$ReventlessInfra from "@reventlessdev/reventless-infra/src/types/ExtensionMapping.res.mjs";
|
|
50
51
|
import * as PluginsProjection$ReventlessCore from "@reventlessdev/reventless-core/src/plugin/lifecycle/PluginsProjection.res.mjs";
|
|
51
52
|
import * as StateTopic_AppSync$ReventlessAws from "./adapter/StateTopic/StateTopic_AppSync.res.mjs";
|
|
53
|
+
import * as AppSync_SdlDecorate$ReventlessAws from "./components/Api/AppSync_SdlDecorate.res.mjs";
|
|
52
54
|
import * as UiFragmentRegistry$ReventlessCore from "@reventlessdev/reventless-core/src/admin/UiFragmentRegistry/StateChangeSlice/UiFragmentRegistry.res.mjs";
|
|
53
55
|
import * as Util_AppSync_Caller$ReventlessAws from "./util/Util_AppSync_Caller.res.mjs";
|
|
54
56
|
import * as Util_ResourceNaming$ReventlessAws from "./util/Util_ResourceNaming.res.mjs";
|
|
@@ -149,6 +151,7 @@ function MakeWithConfig(Config) {
|
|
|
149
151
|
QueryDbBackend$ReventlessAws.exempt(UiFragments$ReventlessCore.name);
|
|
150
152
|
QueryDbBackend$ReventlessAws.exempt(ApiFragmentsReadModelSpec$ReventlessCore.name);
|
|
151
153
|
});
|
|
154
|
+
let mergedApiMode = Config.mergedApi;
|
|
152
155
|
let currentDeployTarget = {
|
|
153
156
|
contents: "Domain"
|
|
154
157
|
};
|
|
@@ -170,6 +173,17 @@ function MakeWithConfig(Config) {
|
|
|
170
173
|
id: Pulumi.output(roleName)
|
|
171
174
|
};
|
|
172
175
|
};
|
|
176
|
+
let emptyBaseFragment = GraphQL_Stitcher$ReventlessCore.encode({
|
|
177
|
+
types: [],
|
|
178
|
+
mutations: [],
|
|
179
|
+
queries: [],
|
|
180
|
+
subscriptions: [],
|
|
181
|
+
subscriptionSources: []
|
|
182
|
+
});
|
|
183
|
+
let adminSourceSdl = () => {
|
|
184
|
+
let baseFragment = AppSync_Adapter$ReventlessAws.injectAwsAuthAll(AdminApi$ReventlessCore.baseFragment(Config.cloner), "Admin", AdminApi$ReventlessCore.systemCallerFieldNames);
|
|
185
|
+
return AppSync_SdlDecorate$ReventlessAws.stampCanonicalTypes(AppSync_Adapter$ReventlessAws.stitchWithAwsDirectives(baseFragment, []));
|
|
186
|
+
};
|
|
173
187
|
let match;
|
|
174
188
|
if (platformStackRef !== undefined) {
|
|
175
189
|
let stackRef = Primitive_option.valFromOption(platformStackRef);
|
|
@@ -218,21 +232,56 @@ function MakeWithConfig(Config) {
|
|
|
218
232
|
let getFromDefault = key => Stdlib_Option.flatMap(Stdlib_Option.flatMap(Stdlib_Option.flatMap($$default, d => Stdlib_JSON.Decode.object(d)), d => d[key]), v => Stdlib_JSON.Decode.string(v));
|
|
219
233
|
return makePhantomRole(Stdlib_Option.getOrThrow(Stdlib_Option.orElse(param[0], getFromDefault("platformApiRoleArn")), undefined));
|
|
220
234
|
});
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
235
|
+
if (mergedApiMode) {
|
|
236
|
+
let cognitoPoolIdOutput = stackRef.getOutput("cognitoUserPoolId");
|
|
237
|
+
let cognitoRegionOutput = stackRef.getOutput("cognitoRegion");
|
|
238
|
+
let userPoolConfig = Pulumi.all([
|
|
239
|
+
cognitoPoolIdOutput,
|
|
240
|
+
cognitoRegionOutput,
|
|
241
|
+
defaultOutput
|
|
242
|
+
]).apply(param => {
|
|
243
|
+
let $$default = param[2];
|
|
244
|
+
let getFromDefault = key => Stdlib_Option.flatMap(Stdlib_Option.flatMap(Stdlib_Option.flatMap($$default, d => Stdlib_JSON.Decode.object(d)), d => d[key]), v => Stdlib_JSON.Decode.string(v));
|
|
245
|
+
let userPoolId = Stdlib_Option.getOrThrow(Stdlib_Option.orElse(param[0], getFromDefault("cognitoUserPoolId")), "Platform stack does not export 'cognitoUserPoolId' — redeploy the platform stack first");
|
|
246
|
+
let awsRegion = Stdlib_Option.orElse(param[1], getFromDefault("cognitoRegion"));
|
|
247
|
+
return {
|
|
248
|
+
userPoolId: userPoolId,
|
|
249
|
+
defaultAction: "ALLOW",
|
|
250
|
+
awsRegion: awsRegion
|
|
251
|
+
};
|
|
252
|
+
});
|
|
253
|
+
let match$1 = AppSync_Adapter$ReventlessAws.makePluginSourceApiResource("PluginSourceApi", userPoolConfig, {});
|
|
254
|
+
let role = match$1[1];
|
|
255
|
+
let api = match$1[0];
|
|
256
|
+
match = [
|
|
257
|
+
api,
|
|
258
|
+
role,
|
|
259
|
+
api,
|
|
260
|
+
role
|
|
261
|
+
];
|
|
262
|
+
} else {
|
|
263
|
+
match = [
|
|
264
|
+
phantomApi,
|
|
265
|
+
phantomRole,
|
|
266
|
+
phantomPlatformApi,
|
|
267
|
+
phantomPlatformRole
|
|
268
|
+
];
|
|
269
|
+
}
|
|
227
270
|
} else {
|
|
228
|
-
let match$
|
|
229
|
-
|
|
230
|
-
|
|
271
|
+
let match$2;
|
|
272
|
+
if (mergedApiMode) {
|
|
273
|
+
let schema = Config.splitApi ? AppSync_SdlDecorate$ReventlessAws.stampCanonicalTypes(AppSync_Adapter$ReventlessAws.stitchWithAwsDirectives(emptyBaseFragment, [])) : adminSourceSdl();
|
|
274
|
+
match$2 = AppSync_Adapter$ReventlessAws.makeSourceApiResource("DomainApi", schema, {});
|
|
275
|
+
} else {
|
|
276
|
+
match$2 = AppSync_Adapter$ReventlessAws.makeApiResource("DomainApi", {});
|
|
277
|
+
}
|
|
278
|
+
let role$1 = match$2[1];
|
|
279
|
+
let api$1 = match$2[0];
|
|
231
280
|
match = [
|
|
232
|
-
api,
|
|
233
|
-
role,
|
|
234
|
-
api,
|
|
235
|
-
role
|
|
281
|
+
api$1,
|
|
282
|
+
role$1,
|
|
283
|
+
api$1,
|
|
284
|
+
role$1
|
|
236
285
|
];
|
|
237
286
|
}
|
|
238
287
|
let domainApiRole = match[1];
|
|
@@ -264,7 +313,7 @@ function MakeWithConfig(Config) {
|
|
|
264
313
|
http: dnsHttp
|
|
265
314
|
}));
|
|
266
315
|
let api_name = Pulumi.output("");
|
|
267
|
-
let api$
|
|
316
|
+
let api$2 = {
|
|
268
317
|
apiId: api_apiId,
|
|
269
318
|
apiArn: api_apiArn,
|
|
270
319
|
dns: api_dns,
|
|
@@ -272,7 +321,7 @@ function MakeWithConfig(Config) {
|
|
|
272
321
|
};
|
|
273
322
|
domainEventsApiOpt = {
|
|
274
323
|
name: "DomainEventsApi",
|
|
275
|
-
api: api$
|
|
324
|
+
api: api$2,
|
|
276
325
|
defaultNamespace: undefined
|
|
277
326
|
};
|
|
278
327
|
} else {
|
|
@@ -452,13 +501,6 @@ function MakeWithConfig(Config) {
|
|
|
452
501
|
project: UiFragments_Projection$ReventlessCore.project,
|
|
453
502
|
moduleUrl: UiFragments_Projection$ReventlessCore.moduleUrl
|
|
454
503
|
});
|
|
455
|
-
let emptyBaseFragment = GraphQL_Stitcher$ReventlessCore.encode({
|
|
456
|
-
types: [],
|
|
457
|
-
mutations: [],
|
|
458
|
-
queries: [],
|
|
459
|
-
subscriptions: [],
|
|
460
|
-
subscriptionSources: []
|
|
461
|
-
});
|
|
462
504
|
let Make$8 = FragmentConfig => {
|
|
463
505
|
let Builder = Api_Builder$ReventlessCore.Make({
|
|
464
506
|
makeApiResource: AppSync_Adapter$ReventlessAws.makeApiResource,
|
|
@@ -483,6 +525,9 @@ function MakeWithConfig(Config) {
|
|
|
483
525
|
let hooksAdminApiRef = {
|
|
484
526
|
contents: undefined
|
|
485
527
|
};
|
|
528
|
+
let mergedSchemaPushedRef = {
|
|
529
|
+
contents: undefined
|
|
530
|
+
};
|
|
486
531
|
let resolveHookedApi = () => {
|
|
487
532
|
let match = hooksApiRef.contents;
|
|
488
533
|
if (match !== undefined) {
|
|
@@ -546,6 +591,22 @@ function MakeWithConfig(Config) {
|
|
|
546
591
|
StateTopic_AppSync$ReventlessAws.finish(eventsApi, {});
|
|
547
592
|
}));
|
|
548
593
|
let hooks_preResolversSchemaHook = (name, version, pluginFragment) => {
|
|
594
|
+
if (mergedApiMode) {
|
|
595
|
+
let sdl = AppSync_Adapter$ReventlessAws.stitchStandaloneWithAwsDirectives(pluginFragment);
|
|
596
|
+
let pushed = Output$Pulumi.flatMap(domainApi, api => Output$Pulumi.flatMap(api.id, apiId => {
|
|
597
|
+
log.info("preResolversSchemaHook", undefined, `Pushing subgraph schema for ` + name + `@` + version + ` to source API ` + apiId);
|
|
598
|
+
let client = AppSync_Adapter$ReventlessAws.getClient();
|
|
599
|
+
return AppSync_Adapter$ReventlessAws.startSchemaCreationRetrying(client, {
|
|
600
|
+
apiId: apiId,
|
|
601
|
+
definition: sdl
|
|
602
|
+
}).then(async () => {
|
|
603
|
+
await AppSync_Adapter$ReventlessAws.waitForSchemaActive(client, apiId, undefined, undefined);
|
|
604
|
+
return log.info("preResolversSchemaHook", undefined, "subgraph schema is ACTIVE");
|
|
605
|
+
});
|
|
606
|
+
}));
|
|
607
|
+
mergedSchemaPushedRef.contents = pushed;
|
|
608
|
+
return pushed;
|
|
609
|
+
}
|
|
549
610
|
log.info("preResolversSchemaHook", undefined, `Pushing schema for plugin ` + name + `@` + version + ` to AppSync`);
|
|
550
611
|
let capturedDeployTarget = currentDeployTarget.contents;
|
|
551
612
|
if (platformStackRef === undefined) {
|
|
@@ -597,6 +658,9 @@ function MakeWithConfig(Config) {
|
|
|
597
658
|
});
|
|
598
659
|
};
|
|
599
660
|
let hooks_preAdminResolversSchemaHook = adminBarrier => {
|
|
661
|
+
if (mergedApiMode) {
|
|
662
|
+
return adminBarrier;
|
|
663
|
+
}
|
|
600
664
|
let match = splitApiOutputsRef.contents;
|
|
601
665
|
let targetApiOpt = match !== undefined ? match.platformApi : (
|
|
602
666
|
Config.splitApi ? undefined : domainApi
|
|
@@ -883,6 +947,9 @@ function MakeWithConfig(Config) {
|
|
|
883
947
|
};
|
|
884
948
|
let makePlatform = (version, plugins) => {
|
|
885
949
|
log.info("Platform", undefined, `v` + version);
|
|
950
|
+
if (mergedApiMode) {
|
|
951
|
+
Pervasives.failwith("mergedApi mode is supported with deployPlatform only — deploy the platform with deployPlatform and each plugin with deployPlugin.");
|
|
952
|
+
}
|
|
886
953
|
let scheduler = makeScheduler();
|
|
887
954
|
hooks_scheduler.contents = scheduler;
|
|
888
955
|
hooksApiRef.contents = Platform_Casts$ReventlessAws.wrapHookedValue(domainApi);
|
|
@@ -967,12 +1034,41 @@ function MakeWithConfig(Config) {
|
|
|
967
1034
|
hooks_scheduler.contents = scheduler;
|
|
968
1035
|
hooksApiRef.contents = Platform_Casts$ReventlessAws.wrapHookedValue(domainApi);
|
|
969
1036
|
hooksApiRoleRef.contents = Platform_Casts$ReventlessAws.wrapHookedValue(domainApiRole);
|
|
970
|
-
let match = Config.splitApi ?
|
|
1037
|
+
let match = Config.splitApi ? (
|
|
1038
|
+
mergedApiMode ? AppSync_Adapter$ReventlessAws.makeSourceApiResource("PlatformApi", adminSourceSdl(), {}) : AppSync_Adapter$ReventlessAws.makeApiResource("PlatformApi", {})
|
|
1039
|
+
) : [
|
|
971
1040
|
domainApi,
|
|
972
1041
|
domainApiRole
|
|
973
1042
|
];
|
|
974
1043
|
let platformApiRole = match[1];
|
|
975
1044
|
let platformApi = match[0];
|
|
1045
|
+
let mergedOutputs;
|
|
1046
|
+
if (mergedApiMode) {
|
|
1047
|
+
AppSync_MergedApi$ReventlessAws.assertCompatiblePrimaryAuth(AppSync_MergedApi$ReventlessAws.authenticationTypeName(AppSync_Adapter$ReventlessAws.primaryAuthenticationType), AppSync_MergedApi$ReventlessAws.primaryAuthMode);
|
|
1048
|
+
let domainMerged = AppSync_MergedApi$ReventlessAws.make("DomainMergedApi", {});
|
|
1049
|
+
if (Config.splitApi) {
|
|
1050
|
+
let platformMerged = AppSync_MergedApi$ReventlessAws.make("PlatformMergedApi", {});
|
|
1051
|
+
let platformAssoc = AppSync_MergedApi$ReventlessAws.associateSource("PlatformAdminSourceAssociation", platformMerged, platformApi, {});
|
|
1052
|
+
let domainAssoc = AppSync_MergedApi$ReventlessAws.associateSource("DomainBaseSourceAssociation", domainMerged, domainApi, {});
|
|
1053
|
+
mergedOutputs = {
|
|
1054
|
+
domainMerged: domainMerged,
|
|
1055
|
+
platformMerged: platformMerged,
|
|
1056
|
+
domainMergeGate: AppSync_MergedApi$ReventlessAws.mergeStatusGate(domainMerged, domainAssoc),
|
|
1057
|
+
platformMergeGate: AppSync_MergedApi$ReventlessAws.mergeStatusGate(platformMerged, platformAssoc)
|
|
1058
|
+
};
|
|
1059
|
+
} else {
|
|
1060
|
+
let assoc = AppSync_MergedApi$ReventlessAws.associateSource("DomainAdminSourceAssociation", domainMerged, domainApi, {});
|
|
1061
|
+
let gate = AppSync_MergedApi$ReventlessAws.mergeStatusGate(domainMerged, assoc);
|
|
1062
|
+
mergedOutputs = {
|
|
1063
|
+
domainMerged: domainMerged,
|
|
1064
|
+
platformMerged: domainMerged,
|
|
1065
|
+
domainMergeGate: gate,
|
|
1066
|
+
platformMergeGate: gate
|
|
1067
|
+
};
|
|
1068
|
+
}
|
|
1069
|
+
} else {
|
|
1070
|
+
mergedOutputs = undefined;
|
|
1071
|
+
}
|
|
976
1072
|
hooksAdminApiRef.contents = Platform_Casts$ReventlessAws.wrapHookedValue(platformApi);
|
|
977
1073
|
if (Config.splitApi) {
|
|
978
1074
|
splitApiOutputsRef.contents = {
|
|
@@ -1105,6 +1201,22 @@ function MakeWithConfig(Config) {
|
|
|
1105
1201
|
Pulumi$Pulumi.$$export("domainApiId", Output$Pulumi.flatMap(domainApi, api => api.id));
|
|
1106
1202
|
Pulumi$Pulumi.$$export("domainApiEndpoint", Output$Pulumi.flatMap(domainApi, api => api.uris.apply(uris => uris.GRAPHQL)));
|
|
1107
1203
|
Pulumi$Pulumi.$$export("domainApiRoleArn", Output$Pulumi.flatMap(domainApiRole, role => role.arn));
|
|
1204
|
+
if (mergedOutputs !== undefined) {
|
|
1205
|
+
let platformMerged$1 = mergedOutputs.platformMerged;
|
|
1206
|
+
let domainMerged$1 = mergedOutputs.domainMerged;
|
|
1207
|
+
let mergeGatedArn = (merged, gate) => Pulumi.all([
|
|
1208
|
+
Output$Pulumi.flatMap(merged.api, api => api.arn),
|
|
1209
|
+
gate
|
|
1210
|
+
]).apply(param => param[0]);
|
|
1211
|
+
let mergedEndpoint = merged => Output$Pulumi.flatMap(merged.api, api => api.uris.apply(uris => uris.GRAPHQL));
|
|
1212
|
+
Pulumi$Pulumi.$$export("domainMergedApiArn", mergeGatedArn(domainMerged$1, mergedOutputs.domainMergeGate));
|
|
1213
|
+
Pulumi$Pulumi.$$export("domainMergedApiId", Output$Pulumi.flatMap(domainMerged$1.api, api => api.id));
|
|
1214
|
+
Pulumi$Pulumi.$$export("domainMergedApiEndpoint", mergedEndpoint(domainMerged$1));
|
|
1215
|
+
Pulumi$Pulumi.$$export("platformMergedApiArn", mergeGatedArn(platformMerged$1, mergedOutputs.platformMergeGate));
|
|
1216
|
+
Pulumi$Pulumi.$$export("platformMergedApiId", Output$Pulumi.flatMap(platformMerged$1.api, api => api.id));
|
|
1217
|
+
Pulumi$Pulumi.$$export("platformMergedApiEndpoint", mergedEndpoint(platformMerged$1));
|
|
1218
|
+
Pulumi$Pulumi.$$export("mergedApiPrimaryAuth", Pulumi.output(AppSync_MergedApi$ReventlessAws.primaryAuthMode));
|
|
1219
|
+
}
|
|
1108
1220
|
if (domainEventsApiOpt !== undefined) {
|
|
1109
1221
|
Pulumi$Pulumi.$$export("eventsApiArn", domainEventsApiOpt.api.apiArn);
|
|
1110
1222
|
Pulumi$Pulumi.$$export("eventsApiDns", domainEventsApiOpt.api.dns.apply(dns => Stdlib_Option.getOr(dns.http, "")));
|
|
@@ -1113,9 +1225,11 @@ function MakeWithConfig(Config) {
|
|
|
1113
1225
|
Pulumi$Pulumi.$$export("pluginRmTableName", pluginReadModelTableName);
|
|
1114
1226
|
}
|
|
1115
1227
|
Plugin_Helpers$ReventlessCore.exportPlatformOutputs(admin.extensionPointsOutputs, admin.aggregatesOutputs, admin.readModelsOutputs, admin.dcbEventLogOutputs, admin.stateChangeSlicesOutputs, admin.stateViewSlicesOutputs, admin.automationSlicesOutputs, admin.outboundTranslationSlicesOutputs, admin.inboundTranslationSlicesOutputs);
|
|
1116
|
-
let
|
|
1228
|
+
let clientDomainApi = mergedOutputs !== undefined ? mergedOutputs.domainMerged.api : domainApi;
|
|
1229
|
+
let clientPlatformApi = mergedOutputs !== undefined ? mergedOutputs.platformMerged.api : platformApi;
|
|
1230
|
+
let resolvedDomainApiEndpoint = Output$Pulumi.flatMap(clientDomainApi, api => api.uris.apply(uris => uris.GRAPHQL));
|
|
1117
1231
|
let resolvedDomainApiRoleArn = Output$Pulumi.flatMap(domainApiRole, role => role.arn);
|
|
1118
|
-
let resolvedPlatformApiEndpoint = Output$Pulumi.flatMap(
|
|
1232
|
+
let resolvedPlatformApiEndpoint = Output$Pulumi.flatMap(clientPlatformApi, api => api.uris.apply(uris => uris.GRAPHQL));
|
|
1119
1233
|
let resolvedPlatformApiRoleArn = Output$Pulumi.flatMap(platformApiRole, role => role.arn);
|
|
1120
1234
|
let adminResourcesOutput = Pulumi.all(Object.values(admin.aggregatesOutputs).map(agg => Aggregate$ReventlessCore.toResolvedOutputs(agg).apply(r => [
|
|
1121
1235
|
r.eventLog.resources,
|
|
@@ -1246,6 +1360,47 @@ function MakeWithConfig(Config) {
|
|
|
1246
1360
|
Pulumi$Pulumi.$$export("_interopMeta", Plugin_Helpers$ReventlessCore.getInteropMeta());
|
|
1247
1361
|
let pluginOutputs = Component$ReventlessCore.outputs(pluginComponent);
|
|
1248
1362
|
Plugin_Helpers$ReventlessCore.exportPluginOutputs(pluginOutputs);
|
|
1363
|
+
if (mergedApiMode && platformStackRef !== undefined) {
|
|
1364
|
+
let stackRef = Primitive_option.valFromOption(platformStackRef);
|
|
1365
|
+
let defaultOutput = stackRef.getOutput("default");
|
|
1366
|
+
let getMergedExport = key => {
|
|
1367
|
+
let direct = stackRef.getOutput(key);
|
|
1368
|
+
return Pulumi.all([
|
|
1369
|
+
direct,
|
|
1370
|
+
defaultOutput
|
|
1371
|
+
]).apply(param => {
|
|
1372
|
+
let direct = param[0];
|
|
1373
|
+
if (direct !== undefined) {
|
|
1374
|
+
return direct;
|
|
1375
|
+
} else {
|
|
1376
|
+
return Stdlib_Option.getOrThrow(Stdlib_Option.flatMap(Stdlib_Option.flatMap(Stdlib_Option.flatMap(param[1], d => Stdlib_JSON.Decode.object(d)), d => d[key]), v => Stdlib_JSON.Decode.string(v)), `Platform stack does not export '` + key + `' — deploy the platform with mergedApi=true first`);
|
|
1377
|
+
}
|
|
1378
|
+
});
|
|
1379
|
+
};
|
|
1380
|
+
let mergedApiArn;
|
|
1381
|
+
mergedApiArn = apiTarget === "Domain" ? getMergedExport("domainMergedApiArn") : getMergedExport("platformMergedApiArn");
|
|
1382
|
+
let checkedMergedApiArn = Pulumi.all([
|
|
1383
|
+
mergedApiArn,
|
|
1384
|
+
getMergedExport("mergedApiPrimaryAuth")
|
|
1385
|
+
]).apply(param => {
|
|
1386
|
+
AppSync_MergedApi$ReventlessAws.assertCompatiblePrimaryAuth(AppSync_MergedApi$ReventlessAws.authenticationTypeName(AppSync_Adapter$ReventlessAws.primaryAuthenticationType), param[1]);
|
|
1387
|
+
return param[0];
|
|
1388
|
+
});
|
|
1389
|
+
let pushed = mergedSchemaPushedRef.contents;
|
|
1390
|
+
let schemaPushed = pushed !== undefined ? pushed : Pulumi.output();
|
|
1391
|
+
let arnAfterSchemaPush = Pulumi.all([
|
|
1392
|
+
checkedMergedApiArn,
|
|
1393
|
+
schemaPushed
|
|
1394
|
+
]).apply(param => param[0]);
|
|
1395
|
+
let association = AppSync_MergedApi$ReventlessAws.associateSourceWithMergedArn("PluginSourceAssociation", arnAfterSchemaPush, domainApi, {});
|
|
1396
|
+
let mergeGate = AppSync_MergedApi$ReventlessAws.mergeStatusGateWith(checkedMergedApiArn, association);
|
|
1397
|
+
Pulumi$Pulumi.$$export("sourceApiAssociationId", Pulumi.all([
|
|
1398
|
+
association.associationId,
|
|
1399
|
+
mergeGate
|
|
1400
|
+
]).apply(param => param[0]));
|
|
1401
|
+
Pulumi$Pulumi.$$export("pluginSourceApiId", Output$Pulumi.flatMap(domainApi, api => api.id));
|
|
1402
|
+
Pulumi$Pulumi.$$export("pluginSourceApiEndpoint", Output$Pulumi.flatMap(domainApi, api => api.uris.apply(uris => uris.GRAPHQL)));
|
|
1403
|
+
}
|
|
1249
1404
|
provisionPgChangeFeedRelay();
|
|
1250
1405
|
let sel = QueryDbBackend$ReventlessAws.get();
|
|
1251
1406
|
if (sel !== undefined) {
|
|
@@ -1371,6 +1526,17 @@ function Make($star) {
|
|
|
1371
1526
|
id: Pulumi.output(roleName)
|
|
1372
1527
|
};
|
|
1373
1528
|
};
|
|
1529
|
+
let emptyBaseFragment = GraphQL_Stitcher$ReventlessCore.encode({
|
|
1530
|
+
types: [],
|
|
1531
|
+
mutations: [],
|
|
1532
|
+
queries: [],
|
|
1533
|
+
subscriptions: [],
|
|
1534
|
+
subscriptionSources: []
|
|
1535
|
+
});
|
|
1536
|
+
let adminSourceSdl = () => {
|
|
1537
|
+
let baseFragment = AppSync_Adapter$ReventlessAws.injectAwsAuthAll(AdminApi$ReventlessCore.baseFragment(false), "Admin", AdminApi$ReventlessCore.systemCallerFieldNames);
|
|
1538
|
+
return AppSync_SdlDecorate$ReventlessAws.stampCanonicalTypes(AppSync_Adapter$ReventlessAws.stitchWithAwsDirectives(baseFragment, []));
|
|
1539
|
+
};
|
|
1374
1540
|
let match;
|
|
1375
1541
|
if (platformStackRef !== undefined) {
|
|
1376
1542
|
let stackRef = Primitive_option.valFromOption(platformStackRef);
|
|
@@ -1378,7 +1544,7 @@ function Make($star) {
|
|
|
1378
1544
|
let domainApiIdOutput = stackRef.getOutput("domainApiId");
|
|
1379
1545
|
let domainApiEndpointOutput = stackRef.getOutput("domainApiEndpoint");
|
|
1380
1546
|
let domainApiRoleArnOutput = stackRef.getOutput("domainApiRoleArn");
|
|
1381
|
-
|
|
1547
|
+
Pulumi.all([
|
|
1382
1548
|
domainApiIdOutput,
|
|
1383
1549
|
domainApiEndpointOutput,
|
|
1384
1550
|
defaultOutput
|
|
@@ -1390,7 +1556,7 @@ function Make($star) {
|
|
|
1390
1556
|
let apiEndpoint = directEndpoint !== undefined ? directEndpoint : Stdlib_Option.getOrThrow(Stdlib_Option.flatMap(Stdlib_Option.flatMap(Stdlib_Option.flatMap($$default, d => Stdlib_JSON.Decode.object(d)), d => d["domainApiEndpoint"]), v => Stdlib_JSON.Decode.string(v)), "Platform stack does not export 'domainApiEndpoint' — redeploy the platform stack first");
|
|
1391
1557
|
return makePhantomApi(apiId, apiEndpoint);
|
|
1392
1558
|
});
|
|
1393
|
-
|
|
1559
|
+
Pulumi.all([
|
|
1394
1560
|
domainApiRoleArnOutput,
|
|
1395
1561
|
defaultOutput
|
|
1396
1562
|
]).apply(param => {
|
|
@@ -1400,7 +1566,7 @@ function Make($star) {
|
|
|
1400
1566
|
let platformApiIdOutput = stackRef.getOutput("platformApiId");
|
|
1401
1567
|
let platformApiEndpointOutput = stackRef.getOutput("platformApiEndpoint");
|
|
1402
1568
|
let platformApiRoleArnOutput = stackRef.getOutput("platformApiRoleArn");
|
|
1403
|
-
|
|
1569
|
+
Pulumi.all([
|
|
1404
1570
|
platformApiIdOutput,
|
|
1405
1571
|
platformApiEndpointOutput,
|
|
1406
1572
|
defaultOutput
|
|
@@ -1411,7 +1577,7 @@ function Make($star) {
|
|
|
1411
1577
|
let platformApiEndpoint = Stdlib_Option.getOrThrow(Stdlib_Option.orElse(param[1], getFromDefault("platformApiEndpoint")), undefined);
|
|
1412
1578
|
return makePhantomApi(platformApiId, platformApiEndpoint);
|
|
1413
1579
|
});
|
|
1414
|
-
|
|
1580
|
+
Pulumi.all([
|
|
1415
1581
|
platformApiRoleArnOutput,
|
|
1416
1582
|
defaultOutput
|
|
1417
1583
|
]).apply(param => {
|
|
@@ -1419,14 +1585,24 @@ function Make($star) {
|
|
|
1419
1585
|
let getFromDefault = key => Stdlib_Option.flatMap(Stdlib_Option.flatMap(Stdlib_Option.flatMap($$default, d => Stdlib_JSON.Decode.object(d)), d => d[key]), v => Stdlib_JSON.Decode.string(v));
|
|
1420
1586
|
return makePhantomRole(Stdlib_Option.getOrThrow(Stdlib_Option.orElse(param[0], getFromDefault("platformApiRoleArn")), undefined));
|
|
1421
1587
|
});
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1588
|
+
let cognitoPoolIdOutput = stackRef.getOutput("cognitoUserPoolId");
|
|
1589
|
+
let cognitoRegionOutput = stackRef.getOutput("cognitoRegion");
|
|
1590
|
+
let userPoolConfig = Pulumi.all([
|
|
1591
|
+
cognitoPoolIdOutput,
|
|
1592
|
+
cognitoRegionOutput,
|
|
1593
|
+
defaultOutput
|
|
1594
|
+
]).apply(param => {
|
|
1595
|
+
let $$default = param[2];
|
|
1596
|
+
let getFromDefault = key => Stdlib_Option.flatMap(Stdlib_Option.flatMap(Stdlib_Option.flatMap($$default, d => Stdlib_JSON.Decode.object(d)), d => d[key]), v => Stdlib_JSON.Decode.string(v));
|
|
1597
|
+
let userPoolId = Stdlib_Option.getOrThrow(Stdlib_Option.orElse(param[0], getFromDefault("cognitoUserPoolId")), "Platform stack does not export 'cognitoUserPoolId' — redeploy the platform stack first");
|
|
1598
|
+
let awsRegion = Stdlib_Option.orElse(param[1], getFromDefault("cognitoRegion"));
|
|
1599
|
+
return {
|
|
1600
|
+
userPoolId: userPoolId,
|
|
1601
|
+
defaultAction: "ALLOW",
|
|
1602
|
+
awsRegion: awsRegion
|
|
1603
|
+
};
|
|
1604
|
+
});
|
|
1605
|
+
let match$1 = AppSync_Adapter$ReventlessAws.makePluginSourceApiResource("PluginSourceApi", userPoolConfig, {});
|
|
1430
1606
|
let role = match$1[1];
|
|
1431
1607
|
let api = match$1[0];
|
|
1432
1608
|
match = [
|
|
@@ -1435,6 +1611,17 @@ function Make($star) {
|
|
|
1435
1611
|
api,
|
|
1436
1612
|
role
|
|
1437
1613
|
];
|
|
1614
|
+
} else {
|
|
1615
|
+
let schema = AppSync_SdlDecorate$ReventlessAws.stampCanonicalTypes(AppSync_Adapter$ReventlessAws.stitchWithAwsDirectives(emptyBaseFragment, []));
|
|
1616
|
+
let match$2 = AppSync_Adapter$ReventlessAws.makeSourceApiResource("DomainApi", schema, {});
|
|
1617
|
+
let role$1 = match$2[1];
|
|
1618
|
+
let api$1 = match$2[0];
|
|
1619
|
+
match = [
|
|
1620
|
+
api$1,
|
|
1621
|
+
role$1,
|
|
1622
|
+
api$1,
|
|
1623
|
+
role$1
|
|
1624
|
+
];
|
|
1438
1625
|
}
|
|
1439
1626
|
let domainApiRole = match[1];
|
|
1440
1627
|
let domainApi = match[0];
|
|
@@ -1465,7 +1652,7 @@ function Make($star) {
|
|
|
1465
1652
|
http: dnsHttp
|
|
1466
1653
|
}));
|
|
1467
1654
|
let api_name = Pulumi.output("");
|
|
1468
|
-
let api$
|
|
1655
|
+
let api$2 = {
|
|
1469
1656
|
apiId: api_apiId,
|
|
1470
1657
|
apiArn: api_apiArn,
|
|
1471
1658
|
dns: api_dns,
|
|
@@ -1473,7 +1660,7 @@ function Make($star) {
|
|
|
1473
1660
|
};
|
|
1474
1661
|
domainEventsApiOpt = {
|
|
1475
1662
|
name: "DomainEventsApi",
|
|
1476
|
-
api: api$
|
|
1663
|
+
api: api$2,
|
|
1477
1664
|
defaultNamespace: undefined
|
|
1478
1665
|
};
|
|
1479
1666
|
} else {
|
|
@@ -1653,13 +1840,6 @@ function Make($star) {
|
|
|
1653
1840
|
project: UiFragments_Projection$ReventlessCore.project,
|
|
1654
1841
|
moduleUrl: UiFragments_Projection$ReventlessCore.moduleUrl
|
|
1655
1842
|
});
|
|
1656
|
-
let emptyBaseFragment = GraphQL_Stitcher$ReventlessCore.encode({
|
|
1657
|
-
types: [],
|
|
1658
|
-
mutations: [],
|
|
1659
|
-
queries: [],
|
|
1660
|
-
subscriptions: [],
|
|
1661
|
-
subscriptionSources: []
|
|
1662
|
-
});
|
|
1663
1843
|
let Make$9 = FragmentConfig => {
|
|
1664
1844
|
let Builder = Api_Builder$ReventlessCore.Make({
|
|
1665
1845
|
makeApiResource: AppSync_Adapter$ReventlessAws.makeApiResource,
|
|
@@ -1683,6 +1863,9 @@ function Make($star) {
|
|
|
1683
1863
|
let hooksAdminApiRef = {
|
|
1684
1864
|
contents: undefined
|
|
1685
1865
|
};
|
|
1866
|
+
let mergedSchemaPushedRef = {
|
|
1867
|
+
contents: undefined
|
|
1868
|
+
};
|
|
1686
1869
|
let resolveHookedApi = () => {
|
|
1687
1870
|
let match = hooksApiRef.contents;
|
|
1688
1871
|
if (match !== undefined) {
|
|
@@ -1699,34 +1882,6 @@ function Make($star) {
|
|
|
1699
1882
|
return resolveHookedApi();
|
|
1700
1883
|
}
|
|
1701
1884
|
};
|
|
1702
|
-
let deployWaiterDelay = ms => new Promise((resolve, param) => {
|
|
1703
|
-
setTimeout(() => resolve(), ms);
|
|
1704
|
-
});
|
|
1705
|
-
let waitForApiFragmentPush = async (endpoint, region, pluginId, sinceAt) => {
|
|
1706
|
-
let loop = async attempt => {
|
|
1707
|
-
if (attempt >= 90) {
|
|
1708
|
-
return Stdlib_JsError.throwWithMessage(`Timed out (>3min) waiting for the platform to push ` + pluginId + `'s API fragment — check the AdminEventCollector Lambda logs.`);
|
|
1709
|
-
}
|
|
1710
|
-
let data = await Util_AppSync_Caller$ReventlessAws.sendQuery(endpoint, region, "query { Platform_ApiFragments { pluginId pushStatus pushMessage pushedAt } }");
|
|
1711
|
-
let row = Stdlib_Option.flatMap(Stdlib_Option.getOr(Stdlib_Option.flatMap(Stdlib_Option.flatMap(Stdlib_Option.flatMap(data, Stdlib_JSON.Decode.object), d => d["Platform_ApiFragments"]), Stdlib_JSON.Decode.array), []).find(entry => Primitive_object.equal(Stdlib_Option.flatMap(Stdlib_Option.flatMap(Stdlib_JSON.Decode.object(entry), e => e["pluginId"]), Stdlib_JSON.Decode.string), pluginId)), Stdlib_JSON.Decode.object);
|
|
1712
|
-
if (row !== undefined) {
|
|
1713
|
-
let field = k => Stdlib_Option.getOr(Stdlib_Option.flatMap(row[k], Stdlib_JSON.Decode.string), "");
|
|
1714
|
-
let status = field("pushStatus");
|
|
1715
|
-
let fresh = field("pushedAt") >= sinceAt;
|
|
1716
|
-
if (fresh && status === "ok") {
|
|
1717
|
-
return log.info("registerFragmentViaApi", undefined, pluginId + ` schema push confirmed ACTIVE`);
|
|
1718
|
-
} else if (fresh && status === "error") {
|
|
1719
|
-
return Stdlib_JsError.throwWithMessage(`Schema push failed for ` + pluginId + `: ` + field("pushMessage"));
|
|
1720
|
-
} else {
|
|
1721
|
-
await deployWaiterDelay(2000);
|
|
1722
|
-
return await loop(attempt + 1 | 0);
|
|
1723
|
-
}
|
|
1724
|
-
}
|
|
1725
|
-
await deployWaiterDelay(2000);
|
|
1726
|
-
return await loop(attempt + 1 | 0);
|
|
1727
|
-
};
|
|
1728
|
-
return await loop(0);
|
|
1729
|
-
};
|
|
1730
1885
|
let hooks_subscriptionInfraHook = Stdlib_Option.map(domainEventsApiOpt, eventsApi => (params => {
|
|
1731
1886
|
let allEventTopics = params.allEventTopics;
|
|
1732
1887
|
let allQueryDbs = params.allQueryDbs;
|
|
@@ -1746,81 +1901,22 @@ function Make($star) {
|
|
|
1746
1901
|
StateTopic_AppSync$ReventlessAws.finish(eventsApi, {});
|
|
1747
1902
|
}));
|
|
1748
1903
|
let hooks_preResolversSchemaHook = (name, version, pluginFragment) => {
|
|
1749
|
-
|
|
1750
|
-
let
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
let at = new Date().toISOString();
|
|
1764
|
-
let variables = {
|
|
1765
|
-
id: "registry",
|
|
1766
|
-
pluginId: name,
|
|
1767
|
-
fragment: {
|
|
1768
|
-
encoded: pluginFragment.encoded,
|
|
1769
|
-
protocol: pluginFragment.protocol
|
|
1770
|
-
},
|
|
1771
|
-
apiTarget: Util_AppSync_Caller$ReventlessAws.graphqlEnum(apiTargetName),
|
|
1772
|
-
at: at
|
|
1773
|
-
};
|
|
1774
|
-
log.info("registerFragmentViaApi", undefined, `Registering API fragment for ` + name + ` (` + apiTargetName + `) via ` + endpoint);
|
|
1775
|
-
let result = await Util_AppSync_Caller$ReventlessAws.sendMutation(endpoint, region, "Platform_ApiFragmentRegistry_RegisterApiFragment", "{ __typename ... on CommandAccepted { eventCount } ... on CommandRejected { errorCode errorDetail } }", variables);
|
|
1776
|
-
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);
|
|
1777
|
-
if (outcome === undefined) {
|
|
1778
|
-
return await waitForApiFragmentPush(endpoint, region, name, at);
|
|
1779
|
-
}
|
|
1780
|
-
let typename = Stdlib_Option.getOr(Stdlib_Option.flatMap(outcome["__typename"], Stdlib_JSON.Decode.string), "");
|
|
1781
|
-
switch (typename) {
|
|
1782
|
-
case "CommandAccepted" :
|
|
1783
|
-
let eventCount = Stdlib_Option.getOr(Stdlib_Option.flatMap(outcome["eventCount"], Stdlib_JSON.Decode.float), 0.0);
|
|
1784
|
-
if (eventCount > 0.0) {
|
|
1785
|
-
return await waitForApiFragmentPush(endpoint, region, name, at);
|
|
1786
|
-
} else {
|
|
1787
|
-
return log.info("registerFragmentViaApi", undefined, name + ` fragment unchanged — no push needed`);
|
|
1788
|
-
}
|
|
1789
|
-
case "CommandRejected" :
|
|
1790
|
-
let code = Stdlib_Option.getOr(Stdlib_Option.flatMap(outcome["errorCode"], Stdlib_JSON.Decode.string), "unknown");
|
|
1791
|
-
return Stdlib_JsError.throwWithMessage(`RegisterApiFragment rejected for ` + name + `: ` + code);
|
|
1792
|
-
default:
|
|
1793
|
-
return await waitForApiFragmentPush(endpoint, region, name, at);
|
|
1794
|
-
}
|
|
1795
|
-
};
|
|
1796
|
-
return run();
|
|
1797
|
-
});
|
|
1798
|
-
};
|
|
1799
|
-
let hooks_preAdminResolversSchemaHook = adminBarrier => {
|
|
1800
|
-
let match = splitApiOutputsRef.contents;
|
|
1801
|
-
let targetApiOpt = match !== undefined ? match.platformApi : undefined;
|
|
1802
|
-
if (targetApiOpt !== undefined) {
|
|
1803
|
-
let adminBaseFragment = AppSync_Adapter$ReventlessAws.injectAwsAuthAll(AdminApi$ReventlessCore.baseFragment(false), "Admin", AdminApi$ReventlessCore.systemCallerFieldNames);
|
|
1804
|
-
let sdl = AppSync_Adapter$ReventlessAws.stitchWithAwsDirectives(adminBaseFragment, []);
|
|
1805
|
-
return Output$Pulumi.flatMap(Pulumi.all([
|
|
1806
|
-
targetApiOpt,
|
|
1807
|
-
adminBarrier
|
|
1808
|
-
]), param => Output$Pulumi.flatMap(param[0].id, apiId => {
|
|
1809
|
-
log.info("preAdminResolversSchemaHook", undefined, `Pushing admin schema to ` + apiId);
|
|
1810
|
-
let client = AppSync_Adapter$ReventlessAws.getClient();
|
|
1811
|
-
return AppSync_Adapter$ReventlessAws.startSchemaCreationRetrying(client, {
|
|
1812
|
-
apiId: apiId,
|
|
1813
|
-
definition: sdl
|
|
1814
|
-
}).then(async () => {
|
|
1815
|
-
log.info("preAdminResolversSchemaHook", undefined, "startSchemaCreation called, waiting for ACTIVE");
|
|
1816
|
-
await AppSync_Adapter$ReventlessAws.waitForSchemaActive(client, apiId, undefined, undefined);
|
|
1817
|
-
return log.info("preAdminResolversSchemaHook", undefined, "schema is ACTIVE");
|
|
1818
|
-
});
|
|
1819
|
-
}));
|
|
1820
|
-
}
|
|
1821
|
-
log.error("preAdminResolversSchemaHook", undefined, "split mode but the PlatformApi is not available at hook time — SKIPPING the admin schema push to avoid clobbering the DomainApi (pushing admin-base here would wipe every plugin field)");
|
|
1822
|
-
return adminBarrier;
|
|
1904
|
+
let sdl = AppSync_Adapter$ReventlessAws.stitchStandaloneWithAwsDirectives(pluginFragment);
|
|
1905
|
+
let pushed = Output$Pulumi.flatMap(domainApi, api => Output$Pulumi.flatMap(api.id, apiId => {
|
|
1906
|
+
log.info("preResolversSchemaHook", undefined, `Pushing subgraph schema for ` + name + `@` + version + ` to source API ` + apiId);
|
|
1907
|
+
let client = AppSync_Adapter$ReventlessAws.getClient();
|
|
1908
|
+
return AppSync_Adapter$ReventlessAws.startSchemaCreationRetrying(client, {
|
|
1909
|
+
apiId: apiId,
|
|
1910
|
+
definition: sdl
|
|
1911
|
+
}).then(async () => {
|
|
1912
|
+
await AppSync_Adapter$ReventlessAws.waitForSchemaActive(client, apiId, undefined, undefined);
|
|
1913
|
+
return log.info("preResolversSchemaHook", undefined, "subgraph schema is ACTIVE");
|
|
1914
|
+
});
|
|
1915
|
+
}));
|
|
1916
|
+
mergedSchemaPushedRef.contents = pushed;
|
|
1917
|
+
return pushed;
|
|
1823
1918
|
};
|
|
1919
|
+
let hooks_preAdminResolversSchemaHook = adminBarrier => adminBarrier;
|
|
1824
1920
|
let hooks_inboundAppSyncResolverHook = param => InboundTranslationResolvers_AppSync$ReventlessAws.make(resolveHookedApi(), param.runtime, param.fieldNames, param.opts);
|
|
1825
1921
|
let hooks_dcbAppSyncResolverHook = param => {
|
|
1826
1922
|
let onAdminApi = param.onAdminApi;
|
|
@@ -2081,6 +2177,7 @@ function Make($star) {
|
|
|
2081
2177
|
};
|
|
2082
2178
|
let makePlatform = (version, plugins) => {
|
|
2083
2179
|
log.info("Platform", undefined, `v` + version);
|
|
2180
|
+
Pervasives.failwith("mergedApi mode is supported with deployPlatform only — deploy the platform with deployPlatform and each plugin with deployPlugin.");
|
|
2084
2181
|
let scheduler = makeScheduler();
|
|
2085
2182
|
hooks_scheduler.contents = scheduler;
|
|
2086
2183
|
hooksApiRef.contents = Platform_Casts$ReventlessAws.wrapHookedValue(domainApi);
|
|
@@ -2154,9 +2251,20 @@ function Make($star) {
|
|
|
2154
2251
|
hooks_scheduler.contents = scheduler;
|
|
2155
2252
|
hooksApiRef.contents = Platform_Casts$ReventlessAws.wrapHookedValue(domainApi);
|
|
2156
2253
|
hooksApiRoleRef.contents = Platform_Casts$ReventlessAws.wrapHookedValue(domainApiRole);
|
|
2157
|
-
let match = AppSync_Adapter$ReventlessAws.
|
|
2254
|
+
let match = AppSync_Adapter$ReventlessAws.makeSourceApiResource("PlatformApi", adminSourceSdl(), {});
|
|
2158
2255
|
let platformApiRole = match[1];
|
|
2159
2256
|
let platformApi = match[0];
|
|
2257
|
+
AppSync_MergedApi$ReventlessAws.assertCompatiblePrimaryAuth(AppSync_MergedApi$ReventlessAws.authenticationTypeName(AppSync_Adapter$ReventlessAws.primaryAuthenticationType), AppSync_MergedApi$ReventlessAws.primaryAuthMode);
|
|
2258
|
+
let domainMerged = AppSync_MergedApi$ReventlessAws.make("DomainMergedApi", {});
|
|
2259
|
+
let platformMerged = AppSync_MergedApi$ReventlessAws.make("PlatformMergedApi", {});
|
|
2260
|
+
let platformAssoc = AppSync_MergedApi$ReventlessAws.associateSource("PlatformAdminSourceAssociation", platformMerged, platformApi, {});
|
|
2261
|
+
let domainAssoc = AppSync_MergedApi$ReventlessAws.associateSource("DomainBaseSourceAssociation", domainMerged, domainApi, {});
|
|
2262
|
+
let mergedOutputs = {
|
|
2263
|
+
domainMerged: domainMerged,
|
|
2264
|
+
platformMerged: platformMerged,
|
|
2265
|
+
domainMergeGate: AppSync_MergedApi$ReventlessAws.mergeStatusGate(domainMerged, domainAssoc),
|
|
2266
|
+
platformMergeGate: AppSync_MergedApi$ReventlessAws.mergeStatusGate(platformMerged, platformAssoc)
|
|
2267
|
+
};
|
|
2160
2268
|
hooksAdminApiRef.contents = Platform_Casts$ReventlessAws.wrapHookedValue(platformApi);
|
|
2161
2269
|
splitApiOutputsRef.contents = {
|
|
2162
2270
|
platformApi: platformApi,
|
|
@@ -2281,6 +2389,22 @@ function Make($star) {
|
|
|
2281
2389
|
Pulumi$Pulumi.$$export("domainApiId", Output$Pulumi.flatMap(domainApi, api => api.id));
|
|
2282
2390
|
Pulumi$Pulumi.$$export("domainApiEndpoint", Output$Pulumi.flatMap(domainApi, api => api.uris.apply(uris => uris.GRAPHQL)));
|
|
2283
2391
|
Pulumi$Pulumi.$$export("domainApiRoleArn", Output$Pulumi.flatMap(domainApiRole, role => role.arn));
|
|
2392
|
+
if (mergedOutputs !== undefined) {
|
|
2393
|
+
let platformMerged$1 = mergedOutputs.platformMerged;
|
|
2394
|
+
let domainMerged$1 = mergedOutputs.domainMerged;
|
|
2395
|
+
let mergeGatedArn = (merged, gate) => Pulumi.all([
|
|
2396
|
+
Output$Pulumi.flatMap(merged.api, api => api.arn),
|
|
2397
|
+
gate
|
|
2398
|
+
]).apply(param => param[0]);
|
|
2399
|
+
let mergedEndpoint = merged => Output$Pulumi.flatMap(merged.api, api => api.uris.apply(uris => uris.GRAPHQL));
|
|
2400
|
+
Pulumi$Pulumi.$$export("domainMergedApiArn", mergeGatedArn(domainMerged$1, mergedOutputs.domainMergeGate));
|
|
2401
|
+
Pulumi$Pulumi.$$export("domainMergedApiId", Output$Pulumi.flatMap(domainMerged$1.api, api => api.id));
|
|
2402
|
+
Pulumi$Pulumi.$$export("domainMergedApiEndpoint", mergedEndpoint(domainMerged$1));
|
|
2403
|
+
Pulumi$Pulumi.$$export("platformMergedApiArn", mergeGatedArn(platformMerged$1, mergedOutputs.platformMergeGate));
|
|
2404
|
+
Pulumi$Pulumi.$$export("platformMergedApiId", Output$Pulumi.flatMap(platformMerged$1.api, api => api.id));
|
|
2405
|
+
Pulumi$Pulumi.$$export("platformMergedApiEndpoint", mergedEndpoint(platformMerged$1));
|
|
2406
|
+
Pulumi$Pulumi.$$export("mergedApiPrimaryAuth", Pulumi.output(AppSync_MergedApi$ReventlessAws.primaryAuthMode));
|
|
2407
|
+
}
|
|
2284
2408
|
if (domainEventsApiOpt !== undefined) {
|
|
2285
2409
|
Pulumi$Pulumi.$$export("eventsApiArn", domainEventsApiOpt.api.apiArn);
|
|
2286
2410
|
Pulumi$Pulumi.$$export("eventsApiDns", domainEventsApiOpt.api.dns.apply(dns => Stdlib_Option.getOr(dns.http, "")));
|
|
@@ -2289,9 +2413,11 @@ function Make($star) {
|
|
|
2289
2413
|
Pulumi$Pulumi.$$export("pluginRmTableName", pluginReadModelTableName);
|
|
2290
2414
|
}
|
|
2291
2415
|
Plugin_Helpers$ReventlessCore.exportPlatformOutputs(admin.extensionPointsOutputs, admin.aggregatesOutputs, admin.readModelsOutputs, admin.dcbEventLogOutputs, admin.stateChangeSlicesOutputs, admin.stateViewSlicesOutputs, admin.automationSlicesOutputs, admin.outboundTranslationSlicesOutputs, admin.inboundTranslationSlicesOutputs);
|
|
2292
|
-
let
|
|
2416
|
+
let clientDomainApi = mergedOutputs !== undefined ? mergedOutputs.domainMerged.api : domainApi;
|
|
2417
|
+
let clientPlatformApi = mergedOutputs !== undefined ? mergedOutputs.platformMerged.api : platformApi;
|
|
2418
|
+
let resolvedDomainApiEndpoint = Output$Pulumi.flatMap(clientDomainApi, api => api.uris.apply(uris => uris.GRAPHQL));
|
|
2293
2419
|
let resolvedDomainApiRoleArn = Output$Pulumi.flatMap(domainApiRole, role => role.arn);
|
|
2294
|
-
let resolvedPlatformApiEndpoint = Output$Pulumi.flatMap(
|
|
2420
|
+
let resolvedPlatformApiEndpoint = Output$Pulumi.flatMap(clientPlatformApi, api => api.uris.apply(uris => uris.GRAPHQL));
|
|
2295
2421
|
let resolvedPlatformApiRoleArn = Output$Pulumi.flatMap(platformApiRole, role => role.arn);
|
|
2296
2422
|
let adminResourcesOutput = Pulumi.all(Object.values(admin.aggregatesOutputs).map(agg => Aggregate$ReventlessCore.toResolvedOutputs(agg).apply(r => [
|
|
2297
2423
|
r.eventLog.resources,
|
|
@@ -2422,6 +2548,47 @@ function Make($star) {
|
|
|
2422
2548
|
Pulumi$Pulumi.$$export("_interopMeta", Plugin_Helpers$ReventlessCore.getInteropMeta());
|
|
2423
2549
|
let pluginOutputs = Component$ReventlessCore.outputs(pluginComponent);
|
|
2424
2550
|
Plugin_Helpers$ReventlessCore.exportPluginOutputs(pluginOutputs);
|
|
2551
|
+
if (platformStackRef !== undefined) {
|
|
2552
|
+
let stackRef = Primitive_option.valFromOption(platformStackRef);
|
|
2553
|
+
let defaultOutput = stackRef.getOutput("default");
|
|
2554
|
+
let getMergedExport = key => {
|
|
2555
|
+
let direct = stackRef.getOutput(key);
|
|
2556
|
+
return Pulumi.all([
|
|
2557
|
+
direct,
|
|
2558
|
+
defaultOutput
|
|
2559
|
+
]).apply(param => {
|
|
2560
|
+
let direct = param[0];
|
|
2561
|
+
if (direct !== undefined) {
|
|
2562
|
+
return direct;
|
|
2563
|
+
} else {
|
|
2564
|
+
return Stdlib_Option.getOrThrow(Stdlib_Option.flatMap(Stdlib_Option.flatMap(Stdlib_Option.flatMap(param[1], d => Stdlib_JSON.Decode.object(d)), d => d[key]), v => Stdlib_JSON.Decode.string(v)), `Platform stack does not export '` + key + `' — deploy the platform with mergedApi=true first`);
|
|
2565
|
+
}
|
|
2566
|
+
});
|
|
2567
|
+
};
|
|
2568
|
+
let mergedApiArn;
|
|
2569
|
+
mergedApiArn = apiTarget === "Domain" ? getMergedExport("domainMergedApiArn") : getMergedExport("platformMergedApiArn");
|
|
2570
|
+
let checkedMergedApiArn = Pulumi.all([
|
|
2571
|
+
mergedApiArn,
|
|
2572
|
+
getMergedExport("mergedApiPrimaryAuth")
|
|
2573
|
+
]).apply(param => {
|
|
2574
|
+
AppSync_MergedApi$ReventlessAws.assertCompatiblePrimaryAuth(AppSync_MergedApi$ReventlessAws.authenticationTypeName(AppSync_Adapter$ReventlessAws.primaryAuthenticationType), param[1]);
|
|
2575
|
+
return param[0];
|
|
2576
|
+
});
|
|
2577
|
+
let pushed = mergedSchemaPushedRef.contents;
|
|
2578
|
+
let schemaPushed = pushed !== undefined ? pushed : Pulumi.output();
|
|
2579
|
+
let arnAfterSchemaPush = Pulumi.all([
|
|
2580
|
+
checkedMergedApiArn,
|
|
2581
|
+
schemaPushed
|
|
2582
|
+
]).apply(param => param[0]);
|
|
2583
|
+
let association = AppSync_MergedApi$ReventlessAws.associateSourceWithMergedArn("PluginSourceAssociation", arnAfterSchemaPush, domainApi, {});
|
|
2584
|
+
let mergeGate = AppSync_MergedApi$ReventlessAws.mergeStatusGateWith(checkedMergedApiArn, association);
|
|
2585
|
+
Pulumi$Pulumi.$$export("sourceApiAssociationId", Pulumi.all([
|
|
2586
|
+
association.associationId,
|
|
2587
|
+
mergeGate
|
|
2588
|
+
]).apply(param => param[0]));
|
|
2589
|
+
Pulumi$Pulumi.$$export("pluginSourceApiId", Output$Pulumi.flatMap(domainApi, api => api.id));
|
|
2590
|
+
Pulumi$Pulumi.$$export("pluginSourceApiEndpoint", Output$Pulumi.flatMap(domainApi, api => api.uris.apply(uris => uris.GRAPHQL)));
|
|
2591
|
+
}
|
|
2425
2592
|
provisionPgChangeFeedRelay();
|
|
2426
2593
|
let sel = QueryDbBackend$ReventlessAws.get();
|
|
2427
2594
|
if (sel !== undefined) {
|