@reventlessdev/reventless-aws 3.0.0-alpha.215 → 3.0.0-alpha.217

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 CHANGED
@@ -3,6 +3,21 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # 3.0.0-alpha.217 (2026-07-19)
7
+
8
+ **Note:** Version bump only for package @reventlessdev/reventless-aws
9
+
10
+
11
+
12
+
13
+
14
+ # 3.0.0-alpha.216 (2026-07-17)
15
+
16
+ ### Bug Fixes
17
+
18
+ * **plugin:** scale heartbeat disconnect grace and enforce single-source interval ([7ba8fb7](https://github.com/ReventlessDev/reventless-core/commit/7ba8fb7bfbe023aba7b538329d2489f939b7fcea))
19
+
20
+
6
21
  # 3.0.0-alpha.215 (2026-07-17)
7
22
 
8
23
  ### Features
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reventlessdev/reventless-aws",
3
- "version": "3.0.0-alpha.215",
3
+ "version": "3.0.0-alpha.217",
4
4
  "description": "AWS adapters for Reventless",
5
5
  "license": "Apache-2.0",
6
6
  "dependencies": {
@@ -8,16 +8,16 @@
8
8
  "@aws-sdk/client-cloudfront": "3.970.0",
9
9
  "sury": "11.0.0-alpha.4",
10
10
  "uuid": "^13.0.0",
11
+ "@reventlessdev/rescript-aws-sdk": "2.2.0-alpha.24",
12
+ "@reventlessdev/rescript-effect": "0.1.0-alpha.29",
11
13
  "@reventlessdev/rescript-jest": "1.0.0-alpha.9",
12
- "@reventlessdev/rescript-pulumi-aws": "2.4.0-alpha.55",
14
+ "@reventlessdev/rescript-pulumi-aws": "2.4.0-alpha.56",
13
15
  "@reventlessdev/rescript-pulumi-pulumi": "2.3.0-alpha.17",
14
- "@reventlessdev/rescript-aws-sdk": "2.2.0-alpha.23",
15
16
  "@reventlessdev/rescript-uuid": "1.1.0-alpha.17",
16
- "@reventlessdev/rescript-effect": "0.1.0-alpha.29",
17
- "@reventlessdev/reventless-core": "3.0.0-alpha.171",
17
+ "@reventlessdev/reventless-core": "3.0.0-alpha.172",
18
18
  "@reventlessdev/reventless-infra": "3.0.0-alpha.102",
19
19
  "@reventlessdev/reventless-interop": "3.0.0-alpha.28",
20
- "@reventlessdev/reventless-postgres": "3.0.0-alpha.35",
20
+ "@reventlessdev/reventless-postgres": "3.0.0-alpha.36",
21
21
  "@reventlessdev/reventless-spec": "3.0.0-alpha.79"
22
22
  },
23
23
  "devDependencies": {
package/src/Platform.res CHANGED
@@ -700,12 +700,13 @@ module MakeWithConfig = (
700
700
  // Heartbeat EP channel hook — extracts SQS queue URL for heartbeat Lambda handler
701
701
  // and records the calling plugin's id so the Lambda runtime can emit Connect commands
702
702
  // with a non-empty SQS MessageGroupId (FIFO requirement).
703
- onHeartbeatEpChannelAvailable: (remoteChannelUnknown, ~pluginId) => {
703
+ onHeartbeatEpChannelAvailable: (remoteChannelUnknown, ~pluginId, ~heartbeatInterval) => {
704
704
  let remoteChannel = remoteChannelUnknown->asRemoteChannel
705
705
  switch remoteChannel.resources->Array.get(0) {
706
706
  | Some(resource) =>
707
707
  PluginRuntime_Builder.registerHeartbeatConfig(
708
708
  ~pluginId,
709
+ ~heartbeatTimeout=heartbeatInterval,
709
710
  ~epQueueUrl=resource.id->Pulumi.Output.make,
710
711
  (),
711
712
  )
@@ -495,10 +495,10 @@ function MakeWithConfig(Config) {
495
495
  StateViewSliceRuntime_Builder_Single$ReventlessAws.finishWithDcbEventLog(dcbEventLogUnknown);
496
496
  AutomationSliceRuntime_Builder_Single$ReventlessAws.finish();
497
497
  };
498
- let hooks_onHeartbeatEpChannelAvailable = (remoteChannelUnknown, pluginId) => {
498
+ let hooks_onHeartbeatEpChannelAvailable = (remoteChannelUnknown, pluginId, heartbeatInterval) => {
499
499
  let resource = remoteChannelUnknown.resources[0];
500
500
  if (resource !== undefined) {
501
- return PluginRuntime_Builder$ReventlessAws.registerHeartbeatConfig(pluginId, undefined, Pulumi.output(resource.id), undefined);
501
+ return PluginRuntime_Builder$ReventlessAws.registerHeartbeatConfig(pluginId, heartbeatInterval, Pulumi.output(resource.id), undefined);
502
502
  } else {
503
503
  return log.warn("Platform", undefined, "heartbeat EP channel has no resources");
504
504
  }
@@ -1467,10 +1467,10 @@ function Make($star) {
1467
1467
  StateViewSliceRuntime_Builder_Single$ReventlessAws.finishWithDcbEventLog(dcbEventLogUnknown);
1468
1468
  AutomationSliceRuntime_Builder_Single$ReventlessAws.finish();
1469
1469
  };
1470
- let hooks_onHeartbeatEpChannelAvailable = (remoteChannelUnknown, pluginId) => {
1470
+ let hooks_onHeartbeatEpChannelAvailable = (remoteChannelUnknown, pluginId, heartbeatInterval) => {
1471
1471
  let resource = remoteChannelUnknown.resources[0];
1472
1472
  if (resource !== undefined) {
1473
- return PluginRuntime_Builder$ReventlessAws.registerHeartbeatConfig(pluginId, undefined, Pulumi.output(resource.id), undefined);
1473
+ return PluginRuntime_Builder$ReventlessAws.registerHeartbeatConfig(pluginId, heartbeatInterval, Pulumi.output(resource.id), undefined);
1474
1474
  } else {
1475
1475
  return log.warn("Platform", undefined, "heartbeat EP channel has no resources");
1476
1476
  }
@@ -56,7 +56,7 @@ external asLambdaRuntime: ReventlessCore.Runtime.environment<unknown> => Reventl
56
56
  // onDcbEventLogCreated?: unknown => unit
57
57
  // onDcbCommandTopicCreated?: unknown => unit
58
58
  // onDcbSlicesCreated?: unknown => unit
59
- // onHeartbeatEpChannelAvailable?: (unknown, ~pluginId: string) => unit
59
+ // onHeartbeatEpChannelAvailable?: (unknown, ~pluginId: string, ~heartbeatInterval: int) => unit
60
60
  //
61
61
  // are typed `unknown => unit` for the same dependency-inversion reason as above:
62
62
  // `reventless-core` cannot import `DcbEventLog.component`, `CommandTopic.component`,
@@ -74,7 +74,12 @@ let heartbeatConfigRef: ref<heartbeatConfig> = ref({
74
74
  epQueueUrl: None,
75
75
  })
76
76
 
77
- let registerHeartbeatConfig = (~pluginId, ~heartbeatTimeout=10, ~epQueueUrl=?, ()) =>
77
+ // heartbeatTimeout is mandatory: it drives the HEARTBEAT_TIMEOUT env var (and thus
78
+ // the Heartbeat(interval) command the bundled Lambda emits), which must match the
79
+ // EventBridge schedule rate derived from the same heartbeatInterval. A default here
80
+ // silently decoupled the two (schedule every 60min, Heartbeat(10) → 12min grace →
81
+ // flapping); make callers supply it so the values can't diverge.
82
+ let registerHeartbeatConfig = (~pluginId, ~heartbeatTimeout, ~epQueueUrl=?, ()) =>
78
83
  heartbeatConfigRef := {pluginId, heartbeatTimeout, epQueueUrl}
79
84
 
80
85
  // Per-flavor commandHandlerConfig override for the two DCB command-handler Lambdas
@@ -76,8 +76,7 @@ let heartbeatConfigRef = {
76
76
  }
77
77
  };
78
78
 
79
- function registerHeartbeatConfig(pluginId, heartbeatTimeoutOpt, epQueueUrl, param) {
80
- let heartbeatTimeout = heartbeatTimeoutOpt !== undefined ? heartbeatTimeoutOpt : 10;
79
+ function registerHeartbeatConfig(pluginId, heartbeatTimeout, epQueueUrl, param) {
81
80
  heartbeatConfigRef.contents = {
82
81
  pluginId: pluginId,
83
82
  heartbeatTimeout: heartbeatTimeout,