@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.
Files changed (164) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/package.json +8 -8
  3. package/src/Platform.res.mjs +4 -0
  4. package/src/Platform_Stack.res +6 -0
  5. package/src/Platform_Stack.res.mjs +3 -1
  6. package/src/adapter/AWS_Tags.res +127 -12
  7. package/src/adapter/AWS_Tags.res.mjs +58 -17
  8. package/src/adapter/Api/AppSync_SourceApiAssociation_Retrying.res +26 -1
  9. package/src/adapter/Api/AppSync_SourceApiAssociation_Retrying.res.mjs +12 -1
  10. package/src/adapter/Api/Platform_ComponentDefinitions_Lambda.res +13 -1
  11. package/src/adapter/Api/Platform_ComponentDefinitions_Lambda.res.mjs +3 -4
  12. package/src/adapter/Api/Platform_UIFragments_Lambda.res +13 -1
  13. package/src/adapter/Api/Platform_UIFragments_Lambda.res.mjs +3 -4
  14. package/src/adapter/CommandGenerator/CommandGeneratorResolvers_AppSync.res +12 -0
  15. package/src/adapter/CommandGenerator/CommandGeneratorResolvers_AppSync.res.mjs +4 -2
  16. package/src/adapter/CommandGenerator/InboundTranslationResolvers_AppSync.res +6 -0
  17. package/src/adapter/CommandGenerator/InboundTranslationResolvers_AppSync.res.mjs +2 -1
  18. package/src/adapter/CommandTopic/CommandTopicChannel_SQS.res +2 -2
  19. package/src/adapter/CommandTopic/CommandTopicChannel_SQS.res.mjs +2 -2
  20. package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Async.res +2 -2
  21. package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Async.res.mjs +2 -2
  22. package/src/adapter/CommandTopic/CommandTopicChannel_SQS_FIFO.res +2 -2
  23. package/src/adapter/CommandTopic/CommandTopicChannel_SQS_FIFO.res.mjs +2 -2
  24. package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Sync.res +2 -2
  25. package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Sync.res.mjs +2 -2
  26. package/src/adapter/Counter/CounterHandler_DynamoDbStream.res +1 -0
  27. package/src/adapter/Counter/CounterHandler_DynamoDbStream.res.mjs +1 -1
  28. package/src/adapter/DcbEventLog/DcbEventLogStorage_DynamoDb.res +1 -1
  29. package/src/adapter/DcbEventLog/DcbEventLogStorage_DynamoDb.res.mjs +1 -2
  30. package/src/adapter/EventCollector/EventCollectorChannel_DynamoDbStream.res +1 -1
  31. package/src/adapter/EventCollector/EventCollectorChannel_DynamoDbStream.res.mjs +1 -1
  32. package/src/adapter/EventCollector/EventCollectorChannel_SQS.res +2 -2
  33. package/src/adapter/EventCollector/EventCollectorChannel_SQS.res.mjs +2 -2
  34. package/src/adapter/EventCollector/EventCollectorChannel_SQS_FIFO.res +2 -2
  35. package/src/adapter/EventCollector/EventCollectorChannel_SQS_FIFO.res.mjs +2 -2
  36. package/src/adapter/EventLog/EventLogStorage.res +3 -3
  37. package/src/adapter/EventLog/EventLogStorage.res.mjs +3 -3
  38. package/src/adapter/EventLog/EventLogStorage_DynamoDb.res +2 -2
  39. package/src/adapter/EventLog/EventLogStorage_DynamoDb.res.mjs +2 -2
  40. package/src/adapter/EventLog/EventLogStorage_DynamoDbStream.res +2 -2
  41. package/src/adapter/EventLog/EventLogStorage_DynamoDbStream.res.mjs +2 -2
  42. package/src/adapter/EventLog/EventLogStorage_Postgres.res +1 -1
  43. package/src/adapter/EventLog/EventLogStorage_Postgres.res.mjs +1 -1
  44. package/src/adapter/EventLogSubscription/EventLogSubscription_AppSync.res +7 -1
  45. package/src/adapter/EventLogSubscription/EventLogSubscription_AppSync.res.mjs +2 -2
  46. package/src/adapter/EventTopic/EventTopicPublisher_DynamoDbStream.res +1 -1
  47. package/src/adapter/EventTopic/EventTopicPublisher_DynamoDbStream.res.mjs +1 -1
  48. package/src/adapter/EventTopic/EventTopicPublisher_SNS.res +2 -2
  49. package/src/adapter/EventTopic/EventTopicPublisher_SNS.res.mjs +2 -2
  50. package/src/adapter/EventTopic/EventTopicPublisher_SNS_FIFO.res +2 -2
  51. package/src/adapter/EventTopic/EventTopicPublisher_SNS_FIFO.res.mjs +2 -2
  52. package/src/adapter/Mcp/MCP_Lambda.res.mjs +1 -1
  53. package/src/adapter/Postgres/PgChangeFeedRelay_Builder.res +7 -0
  54. package/src/adapter/Postgres/PgChangeFeedRelay_Builder.res.mjs +4 -2
  55. package/src/adapter/Postgres/PgMigration_Builder.res +1 -0
  56. package/src/adapter/Postgres/PgMigration_Builder.res.mjs +1 -1
  57. package/src/adapter/QueryDb/PgQueryResolver_Builder.res +7 -0
  58. package/src/adapter/QueryDb/PgQueryResolver_Builder.res.mjs +4 -2
  59. package/src/adapter/QueryDb/QueryDbStorage.res +6 -6
  60. package/src/adapter/QueryDb/QueryDbStorage.res.mjs +6 -6
  61. package/src/adapter/QueryDb/QueryDbStorage_DynamoDb.res +2 -2
  62. package/src/adapter/QueryDb/QueryDbStorage_DynamoDb.res.mjs +2 -2
  63. package/src/adapter/QueryDb/QueryDbStorage_DynamoDbStream.res +2 -2
  64. package/src/adapter/QueryDb/QueryDbStorage_DynamoDbStream.res.mjs +2 -2
  65. package/src/adapter/QueryDb/QueryDbStorage_Postgres.res +1 -1
  66. package/src/adapter/QueryDb/QueryDbStorage_Postgres.res.mjs +1 -1
  67. package/src/adapter/Runtime/AdminEventCollectorEntryPoint.mjs +24 -41
  68. package/src/adapter/Runtime/AggregateEntryPoint.mjs +52 -45
  69. package/src/adapter/Runtime/AggregateRuntime_Builder_Micro.res +19 -2
  70. package/src/adapter/Runtime/AggregateRuntime_Builder_Micro.res.mjs +8 -5
  71. package/src/adapter/Runtime/AggregateRuntime_Builder_Micro_Async.res +19 -2
  72. package/src/adapter/Runtime/AggregateRuntime_Builder_Micro_Async.res.mjs +8 -5
  73. package/src/adapter/Runtime/AggregateRuntime_Builder_PerAggregate.res +9 -1
  74. package/src/adapter/Runtime/AggregateRuntime_Builder_PerAggregate.res.mjs +4 -2
  75. package/src/adapter/Runtime/AggregateRuntime_Builder_PerAggregate_Async.res +9 -1
  76. package/src/adapter/Runtime/AggregateRuntime_Builder_PerAggregate_Async.res.mjs +4 -2
  77. package/src/adapter/Runtime/AggregateRuntime_Builder_Single.res +9 -1
  78. package/src/adapter/Runtime/AggregateRuntime_Builder_Single.res.mjs +4 -2
  79. package/src/adapter/Runtime/AggregateRuntime_Builder_Single_Async.res +9 -1
  80. package/src/adapter/Runtime/AggregateRuntime_Builder_Single_Async.res.mjs +4 -2
  81. package/src/adapter/Runtime/AutomationSliceEntryPoint.mjs +36 -22
  82. package/src/adapter/Runtime/AutomationSliceRuntime_Builder_Single.res +1 -0
  83. package/src/adapter/Runtime/AutomationSliceRuntime_Builder_Single.res.mjs +1 -1
  84. package/src/adapter/Runtime/DcbCommandTopicEntryPoint.mjs +39 -42
  85. package/src/adapter/Runtime/EventCollectorRuntime_Builder_PerEventCollector.res +7 -1
  86. package/src/adapter/Runtime/EventCollectorRuntime_Builder_PerEventCollector.res.mjs +4 -2
  87. package/src/adapter/Runtime/EventCollectorRuntime_Builder_Single.res +19 -1
  88. package/src/adapter/Runtime/EventCollectorRuntime_Builder_Single.res.mjs +5 -2
  89. package/src/adapter/Runtime/EventMapperEntryPoint.mjs +25 -23
  90. package/src/adapter/Runtime/ExtensionPointEntryPoint.mjs +25 -41
  91. package/src/adapter/Runtime/ExtensionPointRuntime_Builder_PerExtensionPoint.res +1 -0
  92. package/src/adapter/Runtime/ExtensionPointRuntime_Builder_PerExtensionPoint.res.mjs +1 -1
  93. package/src/adapter/Runtime/HandlerFactoryHelpers.mjs +126 -0
  94. package/src/adapter/Runtime/PluginExtensionPointEntryPoint.mjs +24 -41
  95. package/src/adapter/Runtime/ReadModelEntryPoint.mjs +33 -24
  96. package/src/adapter/Runtime/RuntimeEnvironment_Lambda.res +52 -2
  97. package/src/adapter/Runtime/RuntimeEnvironment_Lambda.res.mjs +25 -7
  98. package/src/adapter/Runtime/SideEffectEntryPoint.mjs +25 -24
  99. package/src/adapter/Runtime/SideEffectHandlerRuntime_Builder_Single.res +9 -1
  100. package/src/adapter/Runtime/SideEffectHandlerRuntime_Builder_Single.res.mjs +4 -2
  101. package/src/adapter/Runtime/StateChangeSliceRuntime_Builder_Single.res +1 -0
  102. package/src/adapter/Runtime/StateChangeSliceRuntime_Builder_Single.res.mjs +1 -1
  103. package/src/adapter/Runtime/StateViewSliceEntryPoint.mjs +26 -21
  104. package/src/adapter/Runtime/StateViewSliceRuntime_Builder_Single.res +2 -1
  105. package/src/adapter/Runtime/StateViewSliceRuntime_Builder_Single.res.mjs +2 -2
  106. package/src/adapter/Runtime/TaskRuntime_Builder_PerBucket.res +1 -0
  107. package/src/adapter/Runtime/TaskRuntime_Builder_PerBucket.res.mjs +1 -1
  108. package/src/adapter/ScheduledPublisher/ScheduledPublisher_CloudWatchEvents.res +12 -0
  109. package/src/adapter/ScheduledPublisher/ScheduledPublisher_CloudWatchEvents.res.mjs +4 -2
  110. package/src/adapter/StateTopic/StateTopic_AppSync.res +7 -1
  111. package/src/adapter/StateTopic/StateTopic_AppSync.res.mjs +2 -2
  112. package/src/adapter/Task/TaskBucket_S3.res +1 -0
  113. package/src/adapter/Task/TaskBucket_S3.res.mjs +7 -1
  114. package/src/components/Aggregate_Builder_Micro.res.mjs +2 -0
  115. package/src/components/Aggregate_Builder_NoResolver.res.mjs +2 -0
  116. package/src/components/Aggregate_Builder_PerAggregate.res.mjs +2 -0
  117. package/src/components/Aggregate_Builder_Single.res.mjs +2 -0
  118. package/src/components/Aggregate_Builder_Single_Async.res.mjs +2 -0
  119. package/src/components/Api/AppSync_Adapter.res +12 -0
  120. package/src/components/Api/AppSync_Adapter.res.mjs +6 -2
  121. package/src/components/Api/AppSync_MergedApi.res +12 -0
  122. package/src/components/Api/AppSync_MergedApi.res.mjs +5 -2
  123. package/src/components/AutomationSlice_Builder.res.mjs +2 -0
  124. package/src/components/ExtensionPoint_Builder.res.mjs +2 -0
  125. package/src/components/ForeignReadModel_Builder.res.mjs +4 -0
  126. package/src/components/OutboundTranslationSlice_Builder.res.mjs +2 -0
  127. package/src/components/Plugin.res.mjs +2 -0
  128. package/src/components/ReadModel_Builder_NoResolver.res.mjs +2 -0
  129. package/src/components/ReadModel_Builder_NoResolver_Stream.res.mjs +2 -0
  130. package/src/components/ReadModel_Builder_PerReadModel.res.mjs +2 -0
  131. package/src/components/ReadModel_Builder_Single.res.mjs +2 -0
  132. package/src/components/ReadModel_Builder_Single_Stream.res.mjs +2 -0
  133. package/src/components/SideEffectHandler_PerSideEffectHandler.res.mjs +6 -0
  134. package/src/components/SideEffectHandler_Single.res.mjs +4 -0
  135. package/src/components/StateViewSlice_Builder.res.mjs +2 -0
  136. package/src/components/StateViewSlice_Builder_Stream.res.mjs +2 -0
  137. package/src/components/Task_Builder_PerBucket.res.mjs +4 -0
  138. package/src/components/Vpc.res +10 -1
  139. package/src/components/Vpc.res.mjs +3 -1
  140. package/src/plugin/cloner/ClonerRunner_Fargate.res +26 -1
  141. package/src/plugin/cloner/ClonerRunner_Fargate.res.mjs +9 -6
  142. package/src/plugin/heartbeat/HeartbeatRunner_CloudWatchEvents.res +6 -0
  143. package/src/plugin/heartbeat/HeartbeatRunner_CloudWatchEvents.res.mjs +4 -1
  144. package/src/plugin/runtime/PluginExtensionPointRuntime_Builder.res +1 -0
  145. package/src/plugin/runtime/PluginExtensionPointRuntime_Builder.res.mjs +1 -1
  146. package/src/plugin/runtime/PluginRuntime_Builder.res +2 -0
  147. package/src/plugin/runtime/PluginRuntime_Builder.res.mjs +2 -2
  148. package/src/plugin/stack/Plugin_ExtensionPoint_Builder.res.mjs +4 -0
  149. package/src/plugin/stack/Plugin_Stack.res +26 -1
  150. package/src/plugin/stack/Plugin_Stack.res.mjs +8 -3
  151. package/src/util/Util_CognitoGroupUser.res +6 -0
  152. package/src/util/Util_CognitoGroupUser.res.mjs +3 -1
  153. package/src/util/Util_DeadLetterQueue.res +8 -2
  154. package/src/util/Util_DeadLetterQueue.res.mjs +3 -4
  155. package/src/util/Util_LogAttribution.res +31 -0
  156. package/src/util/Util_LogAttribution.res.mjs +27 -0
  157. package/tests/AWS_TagsTest.res +236 -0
  158. package/tests/AWS_TagsTest.res.mjs +153 -0
  159. package/tests/AppSync_SourceApiAssociation_RetryingTest.res +26 -0
  160. package/tests/AppSync_SourceApiAssociation_RetryingTest.res.mjs +20 -0
  161. package/tests/HandlerFactoryDispatchTest.res +190 -0
  162. package/tests/HandlerFactoryDispatchTest.res.mjs +135 -0
  163. package/tests/integration/AggregateEntryPoint_IntegrationTest.res +5 -3
  164. 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, CommandTopic$ReventlessCore.componentType);
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 lambdaRole = IAM$PulumiAws.Role.makeWithDefaultPolicy(name, Pulumi.output(AWS$ReventlessAws.Lambda.principal), opts$1);
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 = AWS_Tags$ReventlessAws.make(name, CommandTopic$ReventlessCore.componentType);
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 * as Effect from "effect/Effect";
6
- import { log, pluginName } from "./HandlerFactoryHelpers.mjs";
7
- import { tag as requestContextTag } from "@reventlessdev/reventless-core/src/RequestContext.res.mjs";
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
- (handlers[h.sourceUrn] ||= []).push(handler);
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
- _currentRequestId = context?.awsRequestId || "unknown";
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
- await Promise.all(streamHandlers.map(h =>
73
- runEffect(undefined, h({ Records: subRecords }, context))
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 { log, pluginName } from "./HandlerFactoryHelpers.mjs";
10
- import { tag as requestContextTag } from "@reventlessdev/reventless-core/src/RequestContext.res.mjs";
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
- // Set at handler entry; read by runEffect to tag logs with the Lambda request id.
23
- let _currentRequestId = "unknown";
24
-
25
- function runEffect(correlationId, effect) {
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
- _currentRequestId = context?.awsRequestId || "unknown";
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
- await Promise.all(streamHandlers.map(h =>
159
- runEffect(undefined, h({ Records: subRecords }, context))
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, {
@@ -74,6 +74,7 @@ let forBucketCallback = (
74
74
  let runtime = RuntimeEnvironment_Lambda.makeFromCodeAsset(
75
75
  ~name=fullName,
76
76
  ~unitKind=ReventlessCore.Monitoring.Task,
77
+ ~componentKind=ReventlessCore.ComponentType.Task,
77
78
  ~code,
78
79
  ~sourceCodeHash,
79
80
  ~envVars,
@@ -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 [