@reventlessdev/reventless-aws 3.0.0-alpha.219 → 3.0.0-alpha.221
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 +18 -0
- package/package.json +8 -8
- package/src/Platform.res.mjs +4 -0
- package/src/Platform_Stack.res +6 -0
- package/src/Platform_Stack.res.mjs +3 -1
- package/src/adapter/AWS_Tags.res +127 -12
- package/src/adapter/AWS_Tags.res.mjs +58 -17
- package/src/adapter/Api/AppSync_SourceApiAssociation_Retrying.res +26 -1
- package/src/adapter/Api/AppSync_SourceApiAssociation_Retrying.res.mjs +12 -1
- package/src/adapter/Api/Platform_ComponentDefinitions_Lambda.res +13 -1
- package/src/adapter/Api/Platform_ComponentDefinitions_Lambda.res.mjs +3 -4
- package/src/adapter/Api/Platform_UIFragments_Lambda.res +13 -1
- package/src/adapter/Api/Platform_UIFragments_Lambda.res.mjs +3 -4
- package/src/adapter/CommandGenerator/CommandGeneratorResolvers_AppSync.res +12 -0
- package/src/adapter/CommandGenerator/CommandGeneratorResolvers_AppSync.res.mjs +4 -2
- package/src/adapter/CommandGenerator/InboundTranslationResolvers_AppSync.res +6 -0
- package/src/adapter/CommandGenerator/InboundTranslationResolvers_AppSync.res.mjs +2 -1
- package/src/adapter/CommandTopic/CommandTopicChannel_SQS.res +2 -2
- package/src/adapter/CommandTopic/CommandTopicChannel_SQS.res.mjs +2 -2
- package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Async.res +2 -2
- package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Async.res.mjs +2 -2
- package/src/adapter/CommandTopic/CommandTopicChannel_SQS_FIFO.res +2 -2
- package/src/adapter/CommandTopic/CommandTopicChannel_SQS_FIFO.res.mjs +2 -2
- package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Sync.res +2 -2
- package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Sync.res.mjs +2 -2
- package/src/adapter/Counter/CounterHandler_DynamoDbStream.res +1 -0
- package/src/adapter/Counter/CounterHandler_DynamoDbStream.res.mjs +1 -1
- package/src/adapter/DcbEventLog/DcbEventLogStorage_DynamoDb.res +1 -1
- package/src/adapter/DcbEventLog/DcbEventLogStorage_DynamoDb.res.mjs +1 -2
- package/src/adapter/EventCollector/EventCollectorChannel_DynamoDbStream.res +1 -1
- package/src/adapter/EventCollector/EventCollectorChannel_DynamoDbStream.res.mjs +1 -1
- package/src/adapter/EventCollector/EventCollectorChannel_SQS.res +2 -2
- package/src/adapter/EventCollector/EventCollectorChannel_SQS.res.mjs +2 -2
- package/src/adapter/EventCollector/EventCollectorChannel_SQS_FIFO.res +2 -2
- package/src/adapter/EventCollector/EventCollectorChannel_SQS_FIFO.res.mjs +2 -2
- package/src/adapter/EventLog/EventLogStorage.res +3 -3
- package/src/adapter/EventLog/EventLogStorage.res.mjs +3 -3
- package/src/adapter/EventLog/EventLogStorage_DynamoDb.res +2 -2
- package/src/adapter/EventLog/EventLogStorage_DynamoDb.res.mjs +2 -2
- package/src/adapter/EventLog/EventLogStorage_DynamoDbStream.res +2 -2
- package/src/adapter/EventLog/EventLogStorage_DynamoDbStream.res.mjs +2 -2
- package/src/adapter/EventLog/EventLogStorage_Postgres.res +1 -1
- package/src/adapter/EventLog/EventLogStorage_Postgres.res.mjs +1 -1
- package/src/adapter/EventLogSubscription/EventLogSubscription_AppSync.res +7 -1
- package/src/adapter/EventLogSubscription/EventLogSubscription_AppSync.res.mjs +2 -2
- package/src/adapter/EventTopic/EventTopicPublisher_DynamoDbStream.res +1 -1
- package/src/adapter/EventTopic/EventTopicPublisher_DynamoDbStream.res.mjs +1 -1
- package/src/adapter/EventTopic/EventTopicPublisher_SNS.res +2 -2
- package/src/adapter/EventTopic/EventTopicPublisher_SNS.res.mjs +2 -2
- package/src/adapter/EventTopic/EventTopicPublisher_SNS_FIFO.res +2 -2
- package/src/adapter/EventTopic/EventTopicPublisher_SNS_FIFO.res.mjs +2 -2
- package/src/adapter/Mcp/MCP_Lambda.res.mjs +1 -1
- package/src/adapter/Postgres/PgChangeFeedRelay_Builder.res +7 -0
- package/src/adapter/Postgres/PgChangeFeedRelay_Builder.res.mjs +4 -2
- package/src/adapter/Postgres/PgMigration_Builder.res +1 -0
- package/src/adapter/Postgres/PgMigration_Builder.res.mjs +1 -1
- package/src/adapter/QueryDb/PgQueryResolver_Builder.res +7 -0
- package/src/adapter/QueryDb/PgQueryResolver_Builder.res.mjs +4 -2
- package/src/adapter/QueryDb/QueryDbStorage.res +6 -6
- package/src/adapter/QueryDb/QueryDbStorage.res.mjs +6 -6
- package/src/adapter/QueryDb/QueryDbStorage_DynamoDb.res +2 -2
- package/src/adapter/QueryDb/QueryDbStorage_DynamoDb.res.mjs +2 -2
- package/src/adapter/QueryDb/QueryDbStorage_DynamoDbStream.res +2 -2
- package/src/adapter/QueryDb/QueryDbStorage_DynamoDbStream.res.mjs +2 -2
- package/src/adapter/QueryDb/QueryDbStorage_Postgres.res +1 -1
- package/src/adapter/QueryDb/QueryDbStorage_Postgres.res.mjs +1 -1
- package/src/adapter/Runtime/AdminEventCollectorEntryPoint.mjs +24 -41
- package/src/adapter/Runtime/AggregateEntryPoint.mjs +52 -45
- package/src/adapter/Runtime/AggregateRuntime_Builder_Micro.res +19 -2
- package/src/adapter/Runtime/AggregateRuntime_Builder_Micro.res.mjs +8 -5
- package/src/adapter/Runtime/AggregateRuntime_Builder_Micro_Async.res +19 -2
- package/src/adapter/Runtime/AggregateRuntime_Builder_Micro_Async.res.mjs +8 -5
- package/src/adapter/Runtime/AggregateRuntime_Builder_PerAggregate.res +9 -1
- package/src/adapter/Runtime/AggregateRuntime_Builder_PerAggregate.res.mjs +4 -2
- package/src/adapter/Runtime/AggregateRuntime_Builder_PerAggregate_Async.res +9 -1
- package/src/adapter/Runtime/AggregateRuntime_Builder_PerAggregate_Async.res.mjs +4 -2
- package/src/adapter/Runtime/AggregateRuntime_Builder_Single.res +9 -1
- package/src/adapter/Runtime/AggregateRuntime_Builder_Single.res.mjs +4 -2
- package/src/adapter/Runtime/AggregateRuntime_Builder_Single_Async.res +9 -1
- package/src/adapter/Runtime/AggregateRuntime_Builder_Single_Async.res.mjs +4 -2
- package/src/adapter/Runtime/AutomationSliceEntryPoint.mjs +36 -22
- package/src/adapter/Runtime/AutomationSliceRuntime_Builder_Single.res +1 -0
- package/src/adapter/Runtime/AutomationSliceRuntime_Builder_Single.res.mjs +1 -1
- package/src/adapter/Runtime/DcbCommandTopicEntryPoint.mjs +39 -42
- package/src/adapter/Runtime/EventCollectorRuntime_Builder_PerEventCollector.res +7 -1
- package/src/adapter/Runtime/EventCollectorRuntime_Builder_PerEventCollector.res.mjs +4 -2
- package/src/adapter/Runtime/EventCollectorRuntime_Builder_Single.res +19 -1
- package/src/adapter/Runtime/EventCollectorRuntime_Builder_Single.res.mjs +5 -2
- package/src/adapter/Runtime/EventMapperEntryPoint.mjs +25 -23
- package/src/adapter/Runtime/ExtensionPointEntryPoint.mjs +25 -41
- package/src/adapter/Runtime/ExtensionPointRuntime_Builder_PerExtensionPoint.res +1 -0
- package/src/adapter/Runtime/ExtensionPointRuntime_Builder_PerExtensionPoint.res.mjs +1 -1
- package/src/adapter/Runtime/HandlerFactoryHelpers.mjs +126 -0
- package/src/adapter/Runtime/PluginExtensionPointEntryPoint.mjs +24 -41
- package/src/adapter/Runtime/ReadModelEntryPoint.mjs +33 -24
- package/src/adapter/Runtime/RuntimeEnvironment_Lambda.res +52 -2
- package/src/adapter/Runtime/RuntimeEnvironment_Lambda.res.mjs +25 -7
- package/src/adapter/Runtime/SideEffectEntryPoint.mjs +25 -24
- package/src/adapter/Runtime/SideEffectHandlerRuntime_Builder_Single.res +9 -1
- package/src/adapter/Runtime/SideEffectHandlerRuntime_Builder_Single.res.mjs +4 -2
- package/src/adapter/Runtime/StateChangeSliceRuntime_Builder_Single.res +1 -0
- package/src/adapter/Runtime/StateChangeSliceRuntime_Builder_Single.res.mjs +1 -1
- package/src/adapter/Runtime/StateViewSliceEntryPoint.mjs +26 -21
- package/src/adapter/Runtime/StateViewSliceRuntime_Builder_Single.res +2 -1
- package/src/adapter/Runtime/StateViewSliceRuntime_Builder_Single.res.mjs +2 -2
- package/src/adapter/Runtime/TaskRuntime_Builder_PerBucket.res +1 -0
- package/src/adapter/Runtime/TaskRuntime_Builder_PerBucket.res.mjs +1 -1
- package/src/adapter/ScheduledPublisher/ScheduledPublisher_CloudWatchEvents.res +12 -0
- package/src/adapter/ScheduledPublisher/ScheduledPublisher_CloudWatchEvents.res.mjs +4 -2
- package/src/adapter/StateTopic/StateTopic_AppSync.res +7 -1
- package/src/adapter/StateTopic/StateTopic_AppSync.res.mjs +2 -2
- package/src/adapter/Task/TaskBucket_S3.res +1 -0
- package/src/adapter/Task/TaskBucket_S3.res.mjs +7 -1
- package/src/components/Aggregate_Builder_Micro.res.mjs +2 -0
- package/src/components/Aggregate_Builder_NoResolver.res.mjs +2 -0
- package/src/components/Aggregate_Builder_PerAggregate.res.mjs +2 -0
- package/src/components/Aggregate_Builder_Single.res.mjs +2 -0
- package/src/components/Aggregate_Builder_Single_Async.res.mjs +2 -0
- package/src/components/Api/AppSync_Adapter.res +12 -0
- package/src/components/Api/AppSync_Adapter.res.mjs +6 -2
- package/src/components/Api/AppSync_MergedApi.res +12 -0
- package/src/components/Api/AppSync_MergedApi.res.mjs +5 -2
- package/src/components/AutomationSlice_Builder.res.mjs +2 -0
- package/src/components/ExtensionPoint_Builder.res.mjs +2 -0
- package/src/components/ForeignReadModel_Builder.res.mjs +4 -0
- package/src/components/OutboundTranslationSlice_Builder.res.mjs +2 -0
- package/src/components/Plugin.res.mjs +2 -0
- package/src/components/ReadModel_Builder_NoResolver.res.mjs +2 -0
- package/src/components/ReadModel_Builder_NoResolver_Stream.res.mjs +2 -0
- package/src/components/ReadModel_Builder_PerReadModel.res.mjs +2 -0
- package/src/components/ReadModel_Builder_Single.res.mjs +2 -0
- package/src/components/ReadModel_Builder_Single_Stream.res.mjs +2 -0
- package/src/components/SideEffectHandler_PerSideEffectHandler.res.mjs +6 -0
- package/src/components/SideEffectHandler_Single.res.mjs +4 -0
- package/src/components/StateViewSlice_Builder.res.mjs +2 -0
- package/src/components/StateViewSlice_Builder_Stream.res.mjs +2 -0
- package/src/components/Task_Builder_PerBucket.res.mjs +4 -0
- package/src/components/Vpc.res +10 -1
- package/src/components/Vpc.res.mjs +3 -1
- package/src/plugin/cloner/ClonerRunner_Fargate.res +26 -1
- package/src/plugin/cloner/ClonerRunner_Fargate.res.mjs +9 -6
- package/src/plugin/heartbeat/HeartbeatRunner_CloudWatchEvents.res +6 -0
- package/src/plugin/heartbeat/HeartbeatRunner_CloudWatchEvents.res.mjs +4 -1
- package/src/plugin/runtime/PluginExtensionPointRuntime_Builder.res +1 -0
- package/src/plugin/runtime/PluginExtensionPointRuntime_Builder.res.mjs +1 -1
- package/src/plugin/runtime/PluginRuntime_Builder.res +2 -0
- package/src/plugin/runtime/PluginRuntime_Builder.res.mjs +2 -2
- package/src/plugin/stack/Plugin_ExtensionPoint_Builder.res.mjs +4 -0
- package/src/plugin/stack/Plugin_Stack.res +26 -1
- package/src/plugin/stack/Plugin_Stack.res.mjs +8 -3
- package/src/util/Util_CognitoGroupUser.res +6 -0
- package/src/util/Util_CognitoGroupUser.res.mjs +3 -1
- package/src/util/Util_DeadLetterQueue.res +8 -2
- package/src/util/Util_DeadLetterQueue.res.mjs +3 -4
- package/src/util/Util_LogAttribution.res +31 -0
- package/src/util/Util_LogAttribution.res.mjs +27 -0
- package/tests/AWS_TagsTest.res +236 -0
- package/tests/AWS_TagsTest.res.mjs +153 -0
- package/tests/AppSync_SourceApiAssociation_RetryingTest.res +26 -0
- package/tests/AppSync_SourceApiAssociation_RetryingTest.res.mjs +20 -0
- package/tests/HandlerFactoryDispatchTest.res +190 -0
- package/tests/HandlerFactoryDispatchTest.res.mjs +135 -0
- package/tests/integration/AggregateEntryPoint_IntegrationTest.res +5 -3
- package/tests/integration/AggregateEntryPoint_IntegrationTest.res.mjs +5 -3
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
2
|
|
|
3
|
+
import * as Stdlib_Int from "@rescript/runtime/lib/es6/Stdlib_Int.js";
|
|
3
4
|
import * as Aws from "@pulumi/aws";
|
|
4
5
|
import * as Stdlib_Dict from "@rescript/runtime/lib/es6/Stdlib_Dict.js";
|
|
5
6
|
import * as Stdlib_JSON from "@rescript/runtime/lib/es6/Stdlib_JSON.js";
|
|
7
|
+
import * as Stdlib_Float from "@rescript/runtime/lib/es6/Stdlib_Float.js";
|
|
6
8
|
import * as IAM$PulumiAws from "@reventlessdev/rescript-pulumi-aws/src/IAM/IAM.res.mjs";
|
|
7
9
|
import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
|
|
8
10
|
import * as Pulumi from "@pulumi/pulumi";
|
|
@@ -17,7 +19,6 @@ import * as Monitoring$ReventlessCore from "@reventlessdev/reventless-core/src/a
|
|
|
17
19
|
import * as Util_Bundle$ReventlessAws from "../../util/Util_Bundle.res.mjs";
|
|
18
20
|
import * as Util_Lambda$ReventlessAws from "../../util/Util_Lambda.res.mjs";
|
|
19
21
|
import * as Util_Pulumi$ReventlessCore from "@reventlessdev/reventless-core/src/util/Util_Pulumi.res.mjs";
|
|
20
|
-
import * as CommandTopic$ReventlessCore from "@reventlessdev/reventless-core/src/components/CommandTopic/CommandTopic.res.mjs";
|
|
21
22
|
import * as Util_IAM_Role$ReventlessAws from "../../util/Util_IAM_Role.res.mjs";
|
|
22
23
|
|
|
23
24
|
let additionalEnvVars = {};
|
|
@@ -28,8 +29,8 @@ function make(name, handler, memorySizeOpt, timeoutOpt, opts) {
|
|
|
28
29
|
let memorySize = memorySizeOpt !== undefined ? memorySizeOpt : 1024;
|
|
29
30
|
let timeout = timeoutOpt !== undefined ? timeoutOpt : 30;
|
|
30
31
|
let opts$1 = Stdlib_Option.map(opts, Util_Pulumi$ReventlessCore.ComponentResourceOptions.toCustomResourceOptions);
|
|
31
|
-
let lambdaRole = IAM$PulumiAws.Role.makeWithDefaultPolicy(name, Pulumi.output(AWS$ReventlessAws.Lambda.principal), opts$1);
|
|
32
|
-
let tags = AWS_Tags$ReventlessAws.make(name,
|
|
32
|
+
let lambdaRole = IAM$PulumiAws.Role.makeWithDefaultPolicy(name, Pulumi.output(AWS$ReventlessAws.Lambda.principal), undefined, opts$1);
|
|
33
|
+
let tags = AWS_Tags$ReventlessAws.make(name, "Platform", "Runtime", "Platform", undefined, undefined, undefined, undefined);
|
|
33
34
|
let lambda = handler.apply(handler => new (Aws.lambda.CallbackFunction)(name, Lambda$PulumiAws.CallbackFunction.Args.make(handler, lambdaRole, undefined, undefined, undefined, memorySize, timeout, undefined, undefined, undefined, tags, undefined), opts$1 !== undefined ? Primitive_option.valFromOption(opts$1) : undefined));
|
|
34
35
|
return {
|
|
35
36
|
parts: {
|
|
@@ -43,13 +44,14 @@ function make(name, handler, memorySizeOpt, timeoutOpt, opts) {
|
|
|
43
44
|
};
|
|
44
45
|
}
|
|
45
46
|
|
|
46
|
-
function makeFromCodeAsset(name, unitKind, code, sourceCodeHash, envVarsOpt, memorySizeOpt, timeoutOpt, reservedConcurrency, ephemeralStorageMb, logRetentionDays, dcbMetricsOpt, vpcConfig, opts) {
|
|
47
|
+
function makeFromCodeAsset(name, unitKind, componentKind, code, sourceCodeHash, envVarsOpt, memorySizeOpt, timeoutOpt, reservedConcurrency, ephemeralStorageMb, logRetentionDays, dcbMetricsOpt, vpcConfig, opts) {
|
|
47
48
|
let envVars = envVarsOpt !== undefined ? envVarsOpt : ({});
|
|
48
49
|
let memorySize = memorySizeOpt !== undefined ? memorySizeOpt : Runtime$ReventlessCore.CommandHandlerDefaults.memorySize;
|
|
49
50
|
let timeout = timeoutOpt !== undefined ? timeoutOpt : Runtime$ReventlessCore.CommandHandlerDefaults.timeout;
|
|
50
51
|
let dcbMetrics = dcbMetricsOpt !== undefined ? dcbMetricsOpt : false;
|
|
51
52
|
let opts$1 = Stdlib_Option.map(opts, Util_Pulumi$ReventlessCore.ComponentResourceOptions.toCustomResourceOptions);
|
|
52
|
-
let
|
|
53
|
+
let tagsFor = (resourceName, role) => AWS_Tags$ReventlessAws.make(resourceName, componentKind, role, undefined, name, undefined, undefined, undefined);
|
|
54
|
+
let lambdaRole = IAM$PulumiAws.Role.makeWithDefaultPolicy(name, Pulumi.output(AWS$ReventlessAws.Lambda.principal), tagsFor(name, "Identity"), opts$1);
|
|
53
55
|
Stdlib_Option.forEach(vpcConfig, param => {
|
|
54
56
|
new (Aws.iam.RolePolicy)(name + `VpcAccess`, {
|
|
55
57
|
policy: PolicyDocument$PulumiAws.toJsonString(PolicyDocument$PulumiAws.make(undefined, name + `VpcAccessPolicy`, [{
|
|
@@ -95,7 +97,7 @@ function makeFromCodeAsset(name, unitKind, code, sourceCodeHash, envVarsOpt, mem
|
|
|
95
97
|
});
|
|
96
98
|
variables["NODE_OPTIONS"] = Util_Bundle$ReventlessAws.esmLoaderNodeOptions;
|
|
97
99
|
variables["ESM_FALLBACK_DIRS"] = Util_Bundle$ReventlessAws.esmFallbackDirs;
|
|
98
|
-
let tags =
|
|
100
|
+
let tags = tagsFor(name, "Runtime");
|
|
99
101
|
let lambda = new (Aws.lambda.Function)(name, {
|
|
100
102
|
handler: "index.handler",
|
|
101
103
|
runtime: "nodejs22.x",
|
|
@@ -118,7 +120,8 @@ function makeFromCodeAsset(name, unitKind, code, sourceCodeHash, envVarsOpt, mem
|
|
|
118
120
|
Stdlib_Option.forEach(logRetentionDays, days => {
|
|
119
121
|
let logGroup = new (Aws.cloudwatch.LogGroup)(name + `LogGroup`, {
|
|
120
122
|
name: `/aws/lambda/` + name,
|
|
121
|
-
retentionInDays: days
|
|
123
|
+
retentionInDays: days,
|
|
124
|
+
tags: tagsFor(name + `LogGroup`, "Logs")
|
|
122
125
|
}, opts$1 !== undefined ? Primitive_option.valFromOption(opts$1) : undefined);
|
|
123
126
|
if (dcbMetrics) {
|
|
124
127
|
[
|
|
@@ -190,6 +193,18 @@ function extractCausationId(event) {
|
|
|
190
193
|
return extractMetaField(event, "causationId");
|
|
191
194
|
}
|
|
192
195
|
|
|
196
|
+
function firstRecordAttributes(event) {
|
|
197
|
+
return Stdlib_Option.flatMap(event.Records[0], prim => prim.attributes);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
function extractSentTimestamp(event) {
|
|
201
|
+
return Stdlib_Option.flatMap(Stdlib_Option.flatMap(firstRecordAttributes(event), attrs => attrs.SentTimestamp), Stdlib_Float.fromString);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
function extractRetryCount(event) {
|
|
205
|
+
return Stdlib_Option.flatMap(Stdlib_Option.flatMap(firstRecordAttributes(event), attrs => attrs.ApproximateReceiveCount), __x => Stdlib_Int.fromString(__x, undefined));
|
|
206
|
+
}
|
|
207
|
+
|
|
193
208
|
export {
|
|
194
209
|
additionalEnvVars,
|
|
195
210
|
additionalIamPolicies,
|
|
@@ -199,5 +214,8 @@ export {
|
|
|
199
214
|
extractMetaField,
|
|
200
215
|
extractCorrelationId,
|
|
201
216
|
extractCausationId,
|
|
217
|
+
firstRecordAttributes,
|
|
218
|
+
extractSentTimestamp,
|
|
219
|
+
extractRetryCount,
|
|
202
220
|
}
|
|
203
221
|
/* @pulumi/aws Not a pure module */
|
|
@@ -2,30 +2,19 @@
|
|
|
2
2
|
// At cold start: reads HANDLER_CONFIG, dynamically imports SideEffect modules,
|
|
3
3
|
// wires SideEffectHandler_Callback.Make, builds handler map keyed by source URN.
|
|
4
4
|
|
|
5
|
-
import
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
import {
|
|
6
|
+
log,
|
|
7
|
+
runEffect,
|
|
8
|
+
setRequestId,
|
|
9
|
+
extractMetaField,
|
|
10
|
+
extractSentTimestamp,
|
|
11
|
+
extractRetryCount,
|
|
12
|
+
} from "./HandlerFactoryHelpers.mjs";
|
|
8
13
|
import { Make as sideEffectHandlerCallbackMake } from "@reventlessdev/reventless-core/src/components/SideEffectHandler/SideEffectHandler_Callback.res.mjs";
|
|
9
14
|
import { handleStreamEvent } from "@reventlessdev/reventless-aws/src/adapter/EventCollector/EventCollectorChannel_DynamoDbStream_Runtime.res.mjs";
|
|
10
15
|
|
|
11
16
|
const dynamicImport = (specifier) => import('/var/task/node_modules/' + specifier);
|
|
12
17
|
|
|
13
|
-
// Set at handler entry; read by runEffect to tag logs with the Lambda request id.
|
|
14
|
-
let _currentRequestId = "unknown";
|
|
15
|
-
|
|
16
|
-
function runEffect(correlationId, effect) {
|
|
17
|
-
let e = effect
|
|
18
|
-
// Promote correlationId/requestId/plugin to top-level JSON log fields —
|
|
19
|
-
// decoded by EffectLogger.install() from Effect log annotations. Harmless
|
|
20
|
-
// no-op if the unified logger isn't installed.
|
|
21
|
-
.pipe(Effect.annotateLogs("correlationId", correlationId || "unknown"))
|
|
22
|
-
.pipe(Effect.annotateLogs("requestId", _currentRequestId));
|
|
23
|
-
if (pluginName) e = e.pipe(Effect.annotateLogs("plugin", pluginName));
|
|
24
|
-
return e
|
|
25
|
-
.pipe(Effect.provideService(requestContextTag, { correlationId: correlationId || "unknown" }))
|
|
26
|
-
.pipe(Effect.runPromise);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
18
|
function groupBySource(records) {
|
|
30
19
|
const dict = {};
|
|
31
20
|
records.forEach(record => {
|
|
@@ -50,8 +39,9 @@ async function buildAllHandlers() {
|
|
|
50
39
|
const handler = (event, context) => handleStreamEvent(callback.handleJsonEvents, event, context);
|
|
51
40
|
// Multiple side-effect handlers can share one source stream. Accumulate all
|
|
52
41
|
// per source ARN; a plain assignment collapses them to one (Promise.all
|
|
53
|
-
// race), silently dropping the rest.
|
|
54
|
-
|
|
42
|
+
// race), silently dropping the rest. `comp`/`plugin` come from
|
|
43
|
+
// HANDLER_CONFIG — the shell has only module paths to identify a handler by.
|
|
44
|
+
(handlers[h.sourceUrn] ||= []).push({ handler, comp: h.comp, plugin: h.plugin });
|
|
55
45
|
}));
|
|
56
46
|
|
|
57
47
|
return handlers;
|
|
@@ -60,7 +50,7 @@ async function buildAllHandlers() {
|
|
|
60
50
|
const initPromise = buildAllHandlers();
|
|
61
51
|
|
|
62
52
|
export async function handler(event, context) {
|
|
63
|
-
|
|
53
|
+
setRequestId(context?.awsRequestId);
|
|
64
54
|
const handlers = await initPromise;
|
|
65
55
|
const records = event.Records || [];
|
|
66
56
|
const grouped = groupBySource(records);
|
|
@@ -69,8 +59,19 @@ export async function handler(event, context) {
|
|
|
69
59
|
const streamHandlers = handlers[arn];
|
|
70
60
|
if (streamHandlers !== undefined && streamHandlers.length > 0) {
|
|
71
61
|
log.debug("found " + streamHandlers.length + " handler(s) for " + arn, { comp: "SideEffectRuntime" });
|
|
72
|
-
|
|
73
|
-
|
|
62
|
+
const correlationId = extractMetaField(subRecords, "correlationId");
|
|
63
|
+
const causationId = extractMetaField(subRecords, "causationId");
|
|
64
|
+
const timestamp = extractSentTimestamp(subRecords);
|
|
65
|
+
const retryCount = extractRetryCount(subRecords);
|
|
66
|
+
await Promise.all(streamHandlers.map(({ handler: h, comp, plugin }) =>
|
|
67
|
+
runEffect(h({ Records: subRecords }, context), {
|
|
68
|
+
correlationId,
|
|
69
|
+
causationId,
|
|
70
|
+
comp,
|
|
71
|
+
plugin,
|
|
72
|
+
timestamp,
|
|
73
|
+
retryCount,
|
|
74
|
+
})
|
|
74
75
|
));
|
|
75
76
|
} else {
|
|
76
77
|
log.warn("no handler found: " + arn, { comp: "SideEffectRuntime" });
|
|
@@ -129,11 +129,18 @@ let finish = () =>
|
|
|
129
129
|
->Array.map(p => p->JSON.stringifyAny->Option.getOr(`""`))
|
|
130
130
|
->Array.join(",")
|
|
131
131
|
|
|
132
|
+
// Log attribution for the shared Lambda, resolved at deploy time —
|
|
133
|
+
// the shell has only module paths to go on, and LogPrefix's registry
|
|
134
|
+
// is a deploy-time structure
|
|
135
|
+
// (docs/plans/entrypoint-dispatch-parity-and-latency-fields.md).
|
|
136
|
+
let attribution = Util_LogAttribution.fragments(
|
|
137
|
+
~comp=`SideEffectHandler(${spec.componentName})`,
|
|
138
|
+
)
|
|
132
139
|
let handlerJson =
|
|
133
140
|
spec.sourceUrns
|
|
134
141
|
->Pulumi.Output.apply(urns => {
|
|
135
142
|
let sourceUrn = urns->Array.getUnsafe(0)
|
|
136
|
-
`{"sideEffectModules":[${modulesJson}],"sourceUrn":"${sourceUrn}"}`
|
|
143
|
+
`{"sideEffectModules":[${modulesJson}],"sourceUrn":"${sourceUrn}"${attribution}}`
|
|
137
144
|
})
|
|
138
145
|
let _ = handlerOutputs->Array.push(handlerJson)
|
|
139
146
|
| None =>
|
|
@@ -168,6 +175,7 @@ let finish = () =>
|
|
|
168
175
|
let runtime = RuntimeEnvironment_Lambda.makeFromCodeAsset(
|
|
169
176
|
~name="AllSideEffectHandlers",
|
|
170
177
|
~unitKind=ReventlessCore.Monitoring.Reactor,
|
|
178
|
+
~componentKind=ReventlessCore.ComponentType.SideEffectHandler,
|
|
171
179
|
~code,
|
|
172
180
|
~sourceCodeHash,
|
|
173
181
|
~envVars,
|
|
@@ -10,6 +10,7 @@ import * as Logger$ReventlessCore from "@reventlessdev/reventless-core/src/util/
|
|
|
10
10
|
import * as Component$ReventlessCore from "@reventlessdev/reventless-core/src/components/Component.res.mjs";
|
|
11
11
|
import * as PolicyDocument$PulumiAws from "@reventlessdev/rescript-pulumi-aws/src/IAM/PolicyDocument.res.mjs";
|
|
12
12
|
import * as Util_Bundle$ReventlessAws from "../../util/Util_Bundle.res.mjs";
|
|
13
|
+
import * as Util_LogAttribution$ReventlessAws from "../../util/Util_LogAttribution.res.mjs";
|
|
13
14
|
import * as RuntimeEnvironment_Lambda$ReventlessAws from "./RuntimeEnvironment_Lambda.res.mjs";
|
|
14
15
|
import * as EventCollectorChannel_DynamoDbStream$ReventlessAws from "../EventCollector/EventCollectorChannel_DynamoDbStream.res.mjs";
|
|
15
16
|
|
|
@@ -101,9 +102,10 @@ function finish() {
|
|
|
101
102
|
packageDirs[pkg] = Util_Bundle$ReventlessAws.resolvePackageRoot(pkg);
|
|
102
103
|
});
|
|
103
104
|
let modulesJson = info.sideEffectModulePaths.map(p => Stdlib_Option.getOr(JSON.stringify(p), `""`)).join(",");
|
|
105
|
+
let attribution = Util_LogAttribution$ReventlessAws.fragments(`SideEffectHandler(` + spec.componentName + `)`);
|
|
104
106
|
let handlerJson = spec.sourceUrns.apply(urns => {
|
|
105
107
|
let sourceUrn = urns[0];
|
|
106
|
-
return `{"sideEffectModules":[` + modulesJson + `],"sourceUrn":"` + sourceUrn + `"}`;
|
|
108
|
+
return `{"sideEffectModules":[` + modulesJson + `],"sourceUrn":"` + sourceUrn + `"` + attribution + `}`;
|
|
107
109
|
});
|
|
108
110
|
handlerOutputs.push(handlerJson);
|
|
109
111
|
});
|
|
@@ -117,7 +119,7 @@ function finish() {
|
|
|
117
119
|
}
|
|
118
120
|
});
|
|
119
121
|
let match$1 = Util_Bundle$ReventlessAws.buildCodeArchive("@reventlessdev/reventless-aws/src/adapter/Runtime/SideEffectEntryPoint.mjs", packageDirs, undefined);
|
|
120
|
-
let runtime = RuntimeEnvironment_Lambda$ReventlessAws.makeFromCodeAsset("AllSideEffectHandlers", "Reactor", match$1.code, match$1.sourceCodeHash, envVars, match[0], match[1], undefined, undefined, undefined, undefined, undefined, opts);
|
|
122
|
+
let runtime = RuntimeEnvironment_Lambda$ReventlessAws.makeFromCodeAsset("AllSideEffectHandlers", "Reactor", "SideEffectHandler", match$1.code, match$1.sourceCodeHash, envVars, match[0], match[1], undefined, undefined, undefined, undefined, undefined, opts);
|
|
121
123
|
if (Object.keys(extraEnvVarsAll).length !== 0) {
|
|
122
124
|
new (Aws.iam.RolePolicy)("AllSideEffectHandlers-appsyncSchemaPush", {
|
|
123
125
|
policy: PolicyDocument$PulumiAws.toJsonString(PolicyDocument$PulumiAws.make(undefined, "AllSideEffectHandlersAppsyncSchemaPushPolicy", [{
|
|
@@ -182,6 +182,7 @@ let forDcbCommandTopic = (
|
|
|
182
182
|
let runtime = RuntimeEnvironment_Lambda.makeFromCodeAsset(
|
|
183
183
|
~name,
|
|
184
184
|
~unitKind=ReventlessCore.Monitoring.CommandHandler,
|
|
185
|
+
~componentKind=ReventlessCore.ComponentType.StateChangeSlice,
|
|
185
186
|
~code,
|
|
186
187
|
~sourceCodeHash,
|
|
187
188
|
~envVars,
|
|
@@ -82,7 +82,7 @@ function forDcbCommandTopic(slicePaths, dcbTableName, pluginName, syncConfig, as
|
|
|
82
82
|
subnetIds: pgSelection.subnetIds,
|
|
83
83
|
securityGroupIds: [sgId]
|
|
84
84
|
})) : undefined;
|
|
85
|
-
let runtime = RuntimeEnvironment_Lambda$ReventlessAws.makeFromCodeAsset(name, "CommandHandler", match.code, match.sourceCodeHash, envVars, memorySize, timeout, cfg.reservedConcurrency, cfg.ephemeralStorageMb, cfg.logRetentionDays, true, vpcConfig, opts);
|
|
85
|
+
let runtime = RuntimeEnvironment_Lambda$ReventlessAws.makeFromCodeAsset(name, "CommandHandler", "StateChangeSlice", match.code, match.sourceCodeHash, envVars, memorySize, timeout, cfg.reservedConcurrency, cfg.ephemeralStorageMb, cfg.logRetentionDays, true, vpcConfig, opts);
|
|
86
86
|
if (pgSelection !== undefined) {
|
|
87
87
|
pgSelection.connectionConfig.apply(cc => new (Aws.iam.RolePolicy)(name + `-pgSecret`, {
|
|
88
88
|
policy: PolicyDocument$PulumiAws.toJsonString(PolicyDocument$PulumiAws.make(undefined, name + `-pgSecretPolicy`, [{
|
|
@@ -6,8 +6,14 @@
|
|
|
6
6
|
import * as Effect from "effect/Effect";
|
|
7
7
|
import * as Stream from "effect/Stream";
|
|
8
8
|
import { parseJsonOrThrow } from "sury/src/S.res.mjs";
|
|
9
|
-
import {
|
|
10
|
-
|
|
9
|
+
import {
|
|
10
|
+
log,
|
|
11
|
+
runEffect,
|
|
12
|
+
setRequestId,
|
|
13
|
+
extractMetaField,
|
|
14
|
+
extractSentTimestamp,
|
|
15
|
+
extractRetryCount,
|
|
16
|
+
} from "./HandlerFactoryHelpers.mjs";
|
|
11
17
|
import { handleAction } from "@reventlessdev/reventless-core/src/Projection.res.mjs";
|
|
12
18
|
// Typed cold-start core — DynamoDB QueryDb ops, compiler-checked against the
|
|
13
19
|
// framework signatures (see the module header and
|
|
@@ -19,21 +25,10 @@ import { handleStreamEvent } from "@reventlessdev/reventless-aws/src/adapter/Eve
|
|
|
19
25
|
|
|
20
26
|
const dynamicImport = (specifier) => import('/var/task/node_modules/' + specifier);
|
|
21
27
|
|
|
22
|
-
//
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
let e = effect
|
|
27
|
-
// Promote correlationId/requestId/plugin to top-level JSON log fields —
|
|
28
|
-
// decoded by EffectLogger.install() from Effect log annotations. Harmless
|
|
29
|
-
// no-op if the unified logger isn't installed.
|
|
30
|
-
.pipe(Effect.annotateLogs("correlationId", correlationId || "unknown"))
|
|
31
|
-
.pipe(Effect.annotateLogs("requestId", _currentRequestId));
|
|
32
|
-
if (pluginName) e = e.pipe(Effect.annotateLogs("plugin", pluginName));
|
|
33
|
-
return e
|
|
34
|
-
.pipe(Effect.provideService(requestContextTag, { correlationId: correlationId || "unknown" }))
|
|
35
|
-
.pipe(Effect.runPromise);
|
|
36
|
-
}
|
|
28
|
+
// One Lambda hosts every state-view slice of a plugin, so each handler carries
|
|
29
|
+
// the comp of the slice it projects — matching the `StateViewSlice(<name>)`
|
|
30
|
+
// shape the rest of the framework logs under.
|
|
31
|
+
const stateViewComp = (sliceName) => `StateViewSlice(${sliceName})`;
|
|
37
32
|
|
|
38
33
|
function groupBySource(records) {
|
|
39
34
|
const dict = {};
|
|
@@ -137,7 +132,7 @@ async function buildAllHandlers() {
|
|
|
137
132
|
const jsonEventsHandler = buildJsonEventsHandler(specModule, projectionModule, h.queryDbTableName, h.pgConnection, h.stateTopicName);
|
|
138
133
|
const streamHandler = (event, context) => handleStreamEvent(jsonEventsHandler, event, context);
|
|
139
134
|
const existing = handlers[h.sourceUrn] || [];
|
|
140
|
-
existing.push(streamHandler);
|
|
135
|
+
existing.push({ handler: streamHandler, comp: stateViewComp(specModule.name) });
|
|
141
136
|
handlers[h.sourceUrn] = existing;
|
|
142
137
|
}));
|
|
143
138
|
return handlers;
|
|
@@ -146,7 +141,7 @@ async function buildAllHandlers() {
|
|
|
146
141
|
const initPromise = buildAllHandlers();
|
|
147
142
|
|
|
148
143
|
export async function handler(event, context) {
|
|
149
|
-
|
|
144
|
+
setRequestId(context?.awsRequestId);
|
|
150
145
|
const handlers = await initPromise;
|
|
151
146
|
const records = event.Records || [];
|
|
152
147
|
const grouped = groupBySource(records);
|
|
@@ -155,8 +150,18 @@ export async function handler(event, context) {
|
|
|
155
150
|
const streamHandlers = handlers[arn];
|
|
156
151
|
if (streamHandlers !== undefined && streamHandlers.length > 0) {
|
|
157
152
|
log.debug("found " + streamHandlers.length + " handler(s) for " + arn, { comp: "StateViewSliceRuntime" });
|
|
158
|
-
|
|
159
|
-
|
|
153
|
+
const correlationId = extractMetaField(subRecords, "correlationId");
|
|
154
|
+
const causationId = extractMetaField(subRecords, "causationId");
|
|
155
|
+
const timestamp = extractSentTimestamp(subRecords);
|
|
156
|
+
const retryCount = extractRetryCount(subRecords);
|
|
157
|
+
await Promise.all(streamHandlers.map(({ handler: h, comp }) =>
|
|
158
|
+
runEffect(h({ Records: subRecords }, context), {
|
|
159
|
+
correlationId,
|
|
160
|
+
causationId,
|
|
161
|
+
comp,
|
|
162
|
+
timestamp,
|
|
163
|
+
retryCount,
|
|
164
|
+
})
|
|
160
165
|
));
|
|
161
166
|
} else {
|
|
162
167
|
log.warn("no handler found: " + arn, { comp: "StateViewSliceRuntime" });
|
|
@@ -277,6 +277,7 @@ let buildLambda = (
|
|
|
277
277
|
let runtime = RuntimeEnvironment_Lambda.makeFromCodeAsset(
|
|
278
278
|
~name="AllStateViewSlices",
|
|
279
279
|
~unitKind=ReventlessCore.Monitoring.Projection,
|
|
280
|
+
~componentKind=ReventlessCore.ComponentType.StateViewSlice,
|
|
280
281
|
~code,
|
|
281
282
|
~sourceCodeHash,
|
|
282
283
|
~envVars,
|
|
@@ -379,7 +380,7 @@ let finishWithDcbEventLog = (dcbEventLog: ReventlessCore.DcbEventLog.component)
|
|
|
379
380
|
let channel = EventCollectorChannel.make(
|
|
380
381
|
~name="AllStateViewSlices",
|
|
381
382
|
~eventTopics,
|
|
382
|
-
~opts={Pulumi.ComponentResource.parent: parent},
|
|
383
|
+
~owner=None, ~opts={Pulumi.ComponentResource.parent: parent},
|
|
383
384
|
)
|
|
384
385
|
|
|
385
386
|
// B3.0: a Postgres-backed DCB log has no stream resource — provision the
|
|
@@ -158,7 +158,7 @@ function buildLambda(parent, handlerOutputs, packageDirs, channelSpecs, feedQueu
|
|
|
158
158
|
subnetIds: qdbSelection.subnetIds,
|
|
159
159
|
securityGroupIds: [sgId]
|
|
160
160
|
})) : undefined;
|
|
161
|
-
let runtime = RuntimeEnvironment_Lambda$ReventlessAws.makeFromCodeAsset("AllStateViewSlices", "Projection", match.code, match.sourceCodeHash, envVars, memorySize, timeout, undefined, undefined, undefined, undefined, vpcConfig, opts);
|
|
161
|
+
let runtime = RuntimeEnvironment_Lambda$ReventlessAws.makeFromCodeAsset("AllStateViewSlices", "Projection", "StateViewSlice", match.code, match.sourceCodeHash, envVars, memorySize, timeout, undefined, undefined, undefined, undefined, vpcConfig, opts);
|
|
162
162
|
if (qdbSelection !== undefined) {
|
|
163
163
|
qdbSelection.connectionConfig.apply(cc => new (Aws.iam.RolePolicy)("AllStateViewSlices-pgSecret", {
|
|
164
164
|
policy: PolicyDocument$PulumiAws.toJsonString(PolicyDocument$PulumiAws.make(undefined, "AllStateViewSlices-pgSecretPolicy", [{
|
|
@@ -201,7 +201,7 @@ function finishWithDcbEventLog(dcbEventLog) {
|
|
|
201
201
|
"DcbEventLog",
|
|
202
202
|
dcbOutputs.eventTopic
|
|
203
203
|
]]);
|
|
204
|
-
let channel = EventCollectorChannel_DynamoDbStream$ReventlessAws.make("AllStateViewSlices", eventTopics, {
|
|
204
|
+
let channel = EventCollectorChannel_DynamoDbStream$ReventlessAws.make("AllStateViewSlices", eventTopics, undefined, {
|
|
205
205
|
parent: parent
|
|
206
206
|
});
|
|
207
207
|
let feedQueue = DcbBackend$ReventlessAws.isPostgres() ? PgProjectionFeed$ReventlessAws.makeQueue("AllStateViewSlicesFeed", "aws-svs-feed", false, true, {
|
|
@@ -29,7 +29,7 @@ function forBucketCallback(param, connect, memorySizeOpt, timeoutOpt, name, call
|
|
|
29
29
|
let pkg = Util_Bundle$ReventlessAws.extractPackageName(callbackModulePath);
|
|
30
30
|
packageDirs[pkg] = Util_Bundle$ReventlessAws.resolvePackageRoot(pkg);
|
|
31
31
|
let match = Util_Bundle$ReventlessAws.buildCodeArchive("@reventlessdev/reventless-aws/src/adapter/Runtime/TaskBucketEntryPoint.mjs", packageDirs, undefined);
|
|
32
|
-
let runtime = RuntimeEnvironment_Lambda$ReventlessAws.makeFromCodeAsset(fullName, "Task", match.code, match.sourceCodeHash, envVars, memorySize, timeout, undefined, undefined, undefined, undefined, undefined, {
|
|
32
|
+
let runtime = RuntimeEnvironment_Lambda$ReventlessAws.makeFromCodeAsset(fullName, "Task", "Task", match.code, match.sourceCodeHash, envVars, memorySize, timeout, undefined, undefined, undefined, undefined, undefined, {
|
|
33
33
|
parent: resource
|
|
34
34
|
});
|
|
35
35
|
if (schedulerConfig !== undefined) {
|
|
@@ -2,6 +2,12 @@ let make: ReventlessCore.Scheduler_Adapter.scheduledPublisherMaker = (~name, ~op
|
|
|
2
2
|
let role = PulumiAws.IAM.Role.makeWithDefaultPolicy(
|
|
3
3
|
~name="CloudWatchEventsRole",
|
|
4
4
|
~servicePrincipal=AWS.CloudwatchEventRule.principal->Pulumi.Output.make,
|
|
5
|
+
~tags=AWS.Tags.make(
|
|
6
|
+
~name="CloudWatchEventsRole",
|
|
7
|
+
~kind=ReventlessCore.ComponentType.Platform,
|
|
8
|
+
~role=Identity,
|
|
9
|
+
~scope=Platform,
|
|
10
|
+
),
|
|
5
11
|
~opts,
|
|
6
12
|
)
|
|
7
13
|
|
|
@@ -30,6 +36,12 @@ let make: ReventlessCore.Scheduler_Adapter.scheduledPublisherMaker = (~name, ~op
|
|
|
30
36
|
)->toJsonString
|
|
31
37
|
})
|
|
32
38
|
->Pulumi.Output.asInput,
|
|
39
|
+
tags: AWS.Tags.make(
|
|
40
|
+
~name=name ++ "CloudWatchEventsPolicy",
|
|
41
|
+
~kind=ReventlessCore.ComponentType.Platform,
|
|
42
|
+
~role=Identity,
|
|
43
|
+
~scope=Platform,
|
|
44
|
+
),
|
|
33
45
|
},
|
|
34
46
|
~opts,
|
|
35
47
|
)
|
|
@@ -4,12 +4,13 @@ import * as Aws from "@pulumi/aws";
|
|
|
4
4
|
import * as IAM$PulumiAws from "@reventlessdev/rescript-pulumi-aws/src/IAM/IAM.res.mjs";
|
|
5
5
|
import * as Pulumi from "@pulumi/pulumi";
|
|
6
6
|
import * as AWS$ReventlessAws from "../AWS.res.mjs";
|
|
7
|
+
import * as AWS_Tags$ReventlessAws from "../AWS_Tags.res.mjs";
|
|
7
8
|
import * as Adapter$ReventlessInfra from "@reventlessdev/reventless-infra/src/adapter/Adapter.res.mjs";
|
|
8
9
|
import * as PolicyDocument$PulumiAws from "@reventlessdev/rescript-pulumi-aws/src/IAM/PolicyDocument.res.mjs";
|
|
9
10
|
import * as ScheduledPublisher_CloudWatchEvents_Runtime$ReventlessAws from "./ScheduledPublisher_CloudWatchEvents_Runtime.res.mjs";
|
|
10
11
|
|
|
11
12
|
function make(name, opts) {
|
|
12
|
-
let role = IAM$PulumiAws.Role.makeWithDefaultPolicy("CloudWatchEventsRole", Pulumi.output(AWS$ReventlessAws.CloudwatchEventRule.principal), opts);
|
|
13
|
+
let role = IAM$PulumiAws.Role.makeWithDefaultPolicy("CloudWatchEventsRole", Pulumi.output(AWS$ReventlessAws.CloudwatchEventRule.principal), AWS_Tags$ReventlessAws.make("CloudWatchEventsRole", "Platform", "Identity", "Platform", undefined, undefined, undefined, undefined), opts);
|
|
13
14
|
new (Aws.iam.Policy)(name + "CloudWatchEventsPolicy", {
|
|
14
15
|
policy: role.arn.apply(roleArn => PolicyDocument$PulumiAws.toJsonString(PolicyDocument$PulumiAws.make(undefined, name + "CloudWatchEventsPolicy", [
|
|
15
16
|
{
|
|
@@ -24,7 +25,8 @@ function make(name, opts) {
|
|
|
24
25
|
Action: "iam:PassRole",
|
|
25
26
|
Resource: roleArn
|
|
26
27
|
}
|
|
27
|
-
])))
|
|
28
|
+
]))),
|
|
29
|
+
tags: AWS_Tags$ReventlessAws.make(name + "CloudWatchEventsPolicy", "Platform", "Identity", "Platform", undefined, undefined, undefined, undefined)
|
|
28
30
|
}, opts);
|
|
29
31
|
return {
|
|
30
32
|
resource: Adapter$ReventlessInfra.make(role.name, role.id, role.arn, Pulumi.output("CloudWatchEvents"), undefined, undefined, undefined, Pulumi.output("aws:cloudwatch:EventRule"), undefined, undefined),
|
|
@@ -281,6 +281,12 @@ let finish = (
|
|
|
281
281
|
let lambdaRole = IAM.Role.makeWithDefaultPolicy(
|
|
282
282
|
~name=name ++ "StateTopicRole",
|
|
283
283
|
~servicePrincipal=AWS.Lambda.principal->Pulumi.Output.make,
|
|
284
|
+
~tags=AWS.Tags.make(
|
|
285
|
+
~name=name ++ "StateTopicRole",
|
|
286
|
+
~kind=ReventlessCore.QueryDb.componentType,
|
|
287
|
+
~role=Identity,
|
|
288
|
+
~component=name,
|
|
289
|
+
),
|
|
284
290
|
~opts,
|
|
285
291
|
)
|
|
286
292
|
|
|
@@ -380,7 +386,7 @@ let finish = (
|
|
|
380
386
|
memorySize: 256->Pulumi.Input.make,
|
|
381
387
|
timeout: 30->Pulumi.Input.make,
|
|
382
388
|
layers,
|
|
383
|
-
tags: AWS.Tags.make(~name=name ++ "StateTopic", ReventlessCore.QueryDb.componentType),
|
|
389
|
+
tags: AWS.Tags.make(~name=name ++ "StateTopic", ~kind=ReventlessCore.QueryDb.componentType, ~role=StateTopic, ~component=name),
|
|
384
390
|
environment: (
|
|
385
391
|
{
|
|
386
392
|
Lambda.Function.variables: Dict.fromArray([
|
|
@@ -198,7 +198,7 @@ function finish(eventsApi, opts) {
|
|
|
198
198
|
return;
|
|
199
199
|
}
|
|
200
200
|
let name = eventsApi.name;
|
|
201
|
-
let lambdaRole = IAM$PulumiAws.Role.makeWithDefaultPolicy(name + "StateTopicRole", Pulumi.output(AWS$ReventlessAws.Lambda.principal), opts);
|
|
201
|
+
let lambdaRole = IAM$PulumiAws.Role.makeWithDefaultPolicy(name + "StateTopicRole", Pulumi.output(AWS$ReventlessAws.Lambda.principal), AWS_Tags$ReventlessAws.make(name + "StateTopicRole", QueryDb$ReventlessCore.componentType, "Identity", undefined, name, undefined, undefined, undefined), opts);
|
|
202
202
|
let streamArnsOutput = Pulumi.all(entries.map(e => e.streamArn));
|
|
203
203
|
Pulumi.all([
|
|
204
204
|
streamArnsOutput,
|
|
@@ -256,7 +256,7 @@ function finish(eventsApi, opts) {
|
|
|
256
256
|
memorySize: 256,
|
|
257
257
|
timeout: 30,
|
|
258
258
|
layers: layers,
|
|
259
|
-
tags: AWS_Tags$ReventlessAws.make(name + "StateTopic", QueryDb$ReventlessCore.componentType),
|
|
259
|
+
tags: AWS_Tags$ReventlessAws.make(name + "StateTopic", QueryDb$ReventlessCore.componentType, "StateTopic", undefined, name, undefined, undefined, undefined),
|
|
260
260
|
environment: {
|
|
261
261
|
variables: Object.fromEntries([
|
|
262
262
|
[
|
|
@@ -143,6 +143,7 @@ let make: ReventlessCore.Task_Adapter.bucketMaker<bucketParts> = (~name, ~opts)
|
|
|
143
143
|
maxAgeSeconds: 3000,
|
|
144
144
|
},
|
|
145
145
|
]->Pulumi.Input.make,
|
|
146
|
+
tags: AWS.Tags.make(~name, ~kind=ReventlessCore.Task.componentType, ~role=Other("Bucket")),
|
|
146
147
|
},
|
|
147
148
|
~opts,
|
|
148
149
|
)
|
|
@@ -4,7 +4,9 @@ import * as Aws from "@pulumi/aws";
|
|
|
4
4
|
import * as Stdlib_Array from "@rescript/runtime/lib/es6/Stdlib_Array.js";
|
|
5
5
|
import * as Pulumi from "@pulumi/pulumi";
|
|
6
6
|
import * as Lambda$PulumiAws from "@reventlessdev/rescript-pulumi-aws/src/Lambda/Lambda.res.mjs";
|
|
7
|
+
import * as Task$ReventlessCore from "@reventlessdev/reventless-core/src/components/Task/Task.res.mjs";
|
|
7
8
|
import * as Util_S3$ReventlessAws from "../../util/Util_S3.res.mjs";
|
|
9
|
+
import * as AWS_Tags$ReventlessAws from "../AWS_Tags.res.mjs";
|
|
8
10
|
import * as Adapter$ReventlessCore from "@reventlessdev/reventless-core/src/adapter/Adapter.res.mjs";
|
|
9
11
|
import * as PolicyDocument$PulumiAws from "@reventlessdev/rescript-pulumi-aws/src/IAM/PolicyDocument.res.mjs";
|
|
10
12
|
import * as Util_Pulumi$ReventlessCore from "@reventlessdev/reventless-core/src/util/Util_Pulumi.res.mjs";
|
|
@@ -88,7 +90,11 @@ function make(name, opts) {
|
|
|
88
90
|
"ETag"
|
|
89
91
|
],
|
|
90
92
|
maxAgeSeconds: 3000
|
|
91
|
-
}]
|
|
93
|
+
}],
|
|
94
|
+
tags: AWS_Tags$ReventlessAws.make(name, Task$ReventlessCore.componentType, {
|
|
95
|
+
TAG: "Other",
|
|
96
|
+
_0: "Bucket"
|
|
97
|
+
}, undefined, undefined, undefined, undefined, undefined)
|
|
92
98
|
}, opts$1);
|
|
93
99
|
return {
|
|
94
100
|
resources: [Util_S3$ReventlessAws.toResource(bucket)],
|
|
@@ -21,6 +21,8 @@ function Make(Spec) {
|
|
|
21
21
|
groupBySource: RuntimeEnvironment_Lambda$ReventlessAws.groupBySource,
|
|
22
22
|
extractCorrelationId: RuntimeEnvironment_Lambda$ReventlessAws.extractCorrelationId,
|
|
23
23
|
extractCausationId: RuntimeEnvironment_Lambda$ReventlessAws.extractCausationId,
|
|
24
|
+
extractSentTimestamp: RuntimeEnvironment_Lambda$ReventlessAws.extractSentTimestamp,
|
|
25
|
+
extractRetryCount: RuntimeEnvironment_Lambda$ReventlessAws.extractRetryCount,
|
|
24
26
|
asEventHandler: prim => prim,
|
|
25
27
|
asEffectHandler: prim => prim
|
|
26
28
|
})(CommandGeneratorResolvers_AppSync$ReventlessAws)({
|
|
@@ -21,6 +21,8 @@ function Make(Spec) {
|
|
|
21
21
|
groupBySource: RuntimeEnvironment_Lambda$ReventlessAws.groupBySource,
|
|
22
22
|
extractCorrelationId: RuntimeEnvironment_Lambda$ReventlessAws.extractCorrelationId,
|
|
23
23
|
extractCausationId: RuntimeEnvironment_Lambda$ReventlessAws.extractCausationId,
|
|
24
|
+
extractSentTimestamp: RuntimeEnvironment_Lambda$ReventlessAws.extractSentTimestamp,
|
|
25
|
+
extractRetryCount: RuntimeEnvironment_Lambda$ReventlessAws.extractRetryCount,
|
|
24
26
|
asEventHandler: prim => prim,
|
|
25
27
|
asEffectHandler: prim => prim
|
|
26
28
|
})(CommandGeneratorResolvers_AppSync_NoOp$ReventlessAws)({
|
|
@@ -21,6 +21,8 @@ function Make(Spec) {
|
|
|
21
21
|
groupBySource: RuntimeEnvironment_Lambda$ReventlessAws.groupBySource,
|
|
22
22
|
extractCorrelationId: RuntimeEnvironment_Lambda$ReventlessAws.extractCorrelationId,
|
|
23
23
|
extractCausationId: RuntimeEnvironment_Lambda$ReventlessAws.extractCausationId,
|
|
24
|
+
extractSentTimestamp: RuntimeEnvironment_Lambda$ReventlessAws.extractSentTimestamp,
|
|
25
|
+
extractRetryCount: RuntimeEnvironment_Lambda$ReventlessAws.extractRetryCount,
|
|
24
26
|
asEventHandler: prim => prim,
|
|
25
27
|
asEffectHandler: prim => prim
|
|
26
28
|
})(CommandGeneratorResolvers_AppSync$ReventlessAws)({
|
|
@@ -23,6 +23,8 @@ function Make(Spec) {
|
|
|
23
23
|
groupBySource: RuntimeEnvironment_Lambda$ReventlessAws.groupBySource,
|
|
24
24
|
extractCorrelationId: RuntimeEnvironment_Lambda$ReventlessAws.extractCorrelationId,
|
|
25
25
|
extractCausationId: RuntimeEnvironment_Lambda$ReventlessAws.extractCausationId,
|
|
26
|
+
extractSentTimestamp: RuntimeEnvironment_Lambda$ReventlessAws.extractSentTimestamp,
|
|
27
|
+
extractRetryCount: RuntimeEnvironment_Lambda$ReventlessAws.extractRetryCount,
|
|
26
28
|
asEventHandler: prim => prim,
|
|
27
29
|
asEffectHandler: prim => prim
|
|
28
30
|
})(CommandGeneratorResolvers_AppSync$ReventlessAws)({
|
|
@@ -23,6 +23,8 @@ function Make(Spec) {
|
|
|
23
23
|
groupBySource: RuntimeEnvironment_Lambda$ReventlessAws.groupBySource,
|
|
24
24
|
extractCorrelationId: RuntimeEnvironment_Lambda$ReventlessAws.extractCorrelationId,
|
|
25
25
|
extractCausationId: RuntimeEnvironment_Lambda$ReventlessAws.extractCausationId,
|
|
26
|
+
extractSentTimestamp: RuntimeEnvironment_Lambda$ReventlessAws.extractSentTimestamp,
|
|
27
|
+
extractRetryCount: RuntimeEnvironment_Lambda$ReventlessAws.extractRetryCount,
|
|
26
28
|
asEventHandler: prim => prim,
|
|
27
29
|
asEffectHandler: prim => prim
|
|
28
30
|
})(CommandGeneratorResolvers_AppSync$ReventlessAws)({
|
|
@@ -482,6 +482,12 @@ let _makeApiResourceWith = (
|
|
|
482
482
|
~args={
|
|
483
483
|
assumeRolePolicy: `{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"appsync.amazonaws.com"},"Action":"sts:AssumeRole"}]}`
|
|
484
484
|
->Pulumi.Input.make,
|
|
485
|
+
tags: AWS.Tags.make(
|
|
486
|
+
~name=`${name}-appsync-role`,
|
|
487
|
+
~kind=ReventlessCore.ComponentType.Platform,
|
|
488
|
+
~role=Identity,
|
|
489
|
+
~scope=Platform,
|
|
490
|
+
),
|
|
485
491
|
},
|
|
486
492
|
~opts=Some(customOpts),
|
|
487
493
|
)
|
|
@@ -539,6 +545,12 @@ let _makeApiResourceWith = (
|
|
|
539
545
|
]->Pulumi.Input.make,
|
|
540
546
|
schema: ?(schema->Option.map(Pulumi.Input.make)),
|
|
541
547
|
logConfig: appsyncLogConfig->Pulumi.Input.make,
|
|
548
|
+
tags: AWS.Tags.make(
|
|
549
|
+
~name,
|
|
550
|
+
~kind=ReventlessCore.ComponentType.Plugin,
|
|
551
|
+
~role=Api,
|
|
552
|
+
~scope=Plugin,
|
|
553
|
+
),
|
|
542
554
|
}
|
|
543
555
|
let graphQLApi = AppSync.GraphQLApi.make(~name, ~args=apiArgs, ~opts=Some(customOpts))
|
|
544
556
|
|
|
@@ -11,6 +11,7 @@ import * as Pulumi from "@pulumi/pulumi";
|
|
|
11
11
|
import * as Stdlib_JsError from "@rescript/runtime/lib/es6/Stdlib_JsError.js";
|
|
12
12
|
import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.js";
|
|
13
13
|
import * as Logger$ReventlessCore from "@reventlessdev/reventless-core/src/util/Logger.res.mjs";
|
|
14
|
+
import * as AWS_Tags$ReventlessAws from "../../adapter/AWS_Tags.res.mjs";
|
|
14
15
|
import * as ClientAppsync from "@aws-sdk/client-appsync";
|
|
15
16
|
import * as Auth_Cognito$ReventlessAws from "../../adapter/Auth/Auth_Cognito.res.mjs";
|
|
16
17
|
import * as AppSync_Error$ReventlessAws from "../../errors/AppSync_Error.res.mjs";
|
|
@@ -274,7 +275,8 @@ function _makeApiResourceWith(name, schema, userPoolConfig, opts) {
|
|
|
274
275
|
parent: customOpts_parent
|
|
275
276
|
};
|
|
276
277
|
let iamRole = new (Aws.iam.Role)(name + `-appsync-role`, {
|
|
277
|
-
assumeRolePolicy: `{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"appsync.amazonaws.com"},"Action":"sts:AssumeRole"}]}
|
|
278
|
+
assumeRolePolicy: `{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"appsync.amazonaws.com"},"Action":"sts:AssumeRole"}]}`,
|
|
279
|
+
tags: AWS_Tags$ReventlessAws.make(name + `-appsync-role`, "Platform", "Identity", "Platform", undefined, undefined, undefined, undefined)
|
|
278
280
|
}, customOpts);
|
|
279
281
|
new (Aws.iam.RolePolicyAttachment)(name + `-appsync-cwlogs`, {
|
|
280
282
|
policyArn: "arn:aws:iam::aws:policy/service-role/AWSAppSyncPushToCloudWatchLogs",
|
|
@@ -296,12 +298,14 @@ function _makeApiResourceWith(name, schema, userPoolConfig, opts) {
|
|
|
296
298
|
authenticationType: "AWS_IAM"
|
|
297
299
|
}];
|
|
298
300
|
let apiArgs_logConfig = appsyncLogConfig;
|
|
301
|
+
let apiArgs_tags = AWS_Tags$ReventlessAws.make(name, "Plugin", "Api", "Plugin", undefined, undefined, undefined, undefined);
|
|
299
302
|
let apiArgs = {
|
|
300
303
|
authenticationType: "AMAZON_COGNITO_USER_POOLS",
|
|
301
304
|
schema: apiArgs_schema,
|
|
302
305
|
userPoolConfig: apiArgs_userPoolConfig,
|
|
303
306
|
additionalAuthenticationProviders: apiArgs_additionalAuthenticationProviders,
|
|
304
|
-
logConfig: apiArgs_logConfig
|
|
307
|
+
logConfig: apiArgs_logConfig,
|
|
308
|
+
tags: apiArgs_tags
|
|
305
309
|
};
|
|
306
310
|
let graphQLApi = new (Aws.appsync.GraphQLApi)(name, apiArgs, customOpts);
|
|
307
311
|
return [
|