@reventlessdev/reventless-aws 3.0.0-alpha.221 → 3.0.0-alpha.222
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 +16 -0
- package/package.json +8 -8
- package/src/Platform.res +2 -2
- package/src/adapter/Mcp/MCP_Lambda.res +4 -4
- package/src/adapter/Runtime/AdminEventCollectorEntryPoint.mjs +2 -2
- package/src/plugin/heartbeat/HeartbeatRunner_CloudWatchEvents.res +7 -7
- package/src/plugin/heartbeat/HeartbeatRunner_CloudWatchEvents.res.mjs +3 -3
- package/src/plugin/runtime/PluginRuntime_Builder.res +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,22 @@
|
|
|
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.222 (2026-07-22)
|
|
7
|
+
|
|
8
|
+
* refactor!: retire the stale "core" vocabulary for platform things ([34e7480](https://github.com/ReventlessDev/reventless-core/commit/34e7480992bd58906a250b0a1ce6ff2c5ba45260))
|
|
9
|
+
|
|
10
|
+
### BREAKING CHANGES
|
|
11
|
+
|
|
12
|
+
* the built-in extension point is renamed Core.Plugin ->
|
|
13
|
+
Platform.Plugin. This replaces the CorePluginExtPointCmdTopic SQS queue
|
|
14
|
+
with PlatformPluginExtPointCmdTopic (a replacement, not an update) and
|
|
15
|
+
breaks every already-deployed plugin's connection until redeployed.
|
|
16
|
+
Wipe the alpha stack and redeploy fresh rather than migrating.
|
|
17
|
+
|
|
18
|
+
Build clean; 1349 tests green (interop 50, core 518, local 501, aws 280).
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
6
22
|
# 3.0.0-alpha.221 (2026-07-22)
|
|
7
23
|
|
|
8
24
|
### Features
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reventlessdev/reventless-aws",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.222",
|
|
4
4
|
"description": "AWS adapters for Reventless",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"dependencies": {
|
|
@@ -8,17 +8,17 @@
|
|
|
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-effect": "0.1.0-alpha.30",
|
|
12
11
|
"@reventlessdev/rescript-aws-sdk": "2.2.0-alpha.24",
|
|
13
|
-
"@reventlessdev/rescript-jest": "1.0.0-alpha.9",
|
|
14
12
|
"@reventlessdev/rescript-pulumi-aws": "2.4.0-alpha.57",
|
|
13
|
+
"@reventlessdev/rescript-effect": "0.1.0-alpha.30",
|
|
14
|
+
"@reventlessdev/rescript-jest": "1.0.0-alpha.9",
|
|
15
15
|
"@reventlessdev/rescript-pulumi-pulumi": "2.3.0-alpha.17",
|
|
16
|
-
"@reventlessdev/reventless-core": "3.0.0-alpha.175",
|
|
17
|
-
"@reventlessdev/reventless-infra": "3.0.0-alpha.103",
|
|
18
|
-
"@reventlessdev/reventless-postgres": "3.0.0-alpha.39",
|
|
19
|
-
"@reventlessdev/reventless-spec": "3.0.0-alpha.80",
|
|
20
16
|
"@reventlessdev/rescript-uuid": "1.1.0-alpha.17",
|
|
21
|
-
"@reventlessdev/reventless-
|
|
17
|
+
"@reventlessdev/reventless-core": "3.0.0-alpha.176",
|
|
18
|
+
"@reventlessdev/reventless-postgres": "3.0.0-alpha.40",
|
|
19
|
+
"@reventlessdev/reventless-interop": "3.0.0-alpha.29",
|
|
20
|
+
"@reventlessdev/reventless-infra": "3.0.0-alpha.104",
|
|
21
|
+
"@reventlessdev/reventless-spec": "3.0.0-alpha.80"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"rescript": "12.3.0",
|
package/src/Platform.res
CHANGED
|
@@ -234,7 +234,7 @@ module MakeWithConfig = (
|
|
|
234
234
|
|
|
235
235
|
// Populate apiConfig with both domain and platform API references.
|
|
236
236
|
// In platform/monolithic mode, platformApi starts as domainApi and is updated
|
|
237
|
-
// by deployPlatform/makePlatform once the
|
|
237
|
+
// by deployPlatform/makePlatform once the platform API resource is created (split mode).
|
|
238
238
|
let () = apiConfigRef := Some({
|
|
239
239
|
domainApi: domainApi,
|
|
240
240
|
domainApiRole: domainApiRole,
|
|
@@ -980,7 +980,7 @@ module MakeWithConfig = (
|
|
|
980
980
|
}
|
|
981
981
|
}
|
|
982
982
|
|
|
983
|
-
// In split mode, create a dedicated
|
|
983
|
+
// In split mode, create a dedicated platform AppSync API and push the platform schema.
|
|
984
984
|
// In unified mode, makePlatform is a no-op (schema stitching handled by events).
|
|
985
985
|
let makePlatform = (~version, ~plugins: array<module(PluginMaker)>) => {
|
|
986
986
|
log.info(~comp="Platform", `v${version}`)
|
|
@@ -102,11 +102,11 @@ let generateConfig = (
|
|
|
102
102
|
{serverName, serverVersion, tools, resources, eventHistoryResources}
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
/** Generate the
|
|
106
|
-
Contains only
|
|
107
|
-
and
|
|
105
|
+
/** Generate the platform-only MCP config for split mode.
|
|
106
|
+
Contains only platform administrative tools (Plugin_Activate, Plugin_Deactivate, Clone)
|
|
107
|
+
and platform resources (Plugin, Plugins). No plugin-contributed entries.
|
|
108
108
|
|
|
109
|
-
The commandTopicArns and queryDbTableNames must map
|
|
109
|
+
The commandTopicArns and queryDbTableNames must map platform field names to their
|
|
110
110
|
corresponding AWS resource ARNs/names. When Lambda Function URL deployment is
|
|
111
111
|
available (Step 13), these will be wired from Pulumi stack outputs. */
|
|
112
112
|
let generateAdminConfig = (
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
//
|
|
7
7
|
// {
|
|
8
8
|
// "queueUrl": string // SQS URL of the EventCollector this Lambda drains
|
|
9
|
-
// "pluginExtensionPointCmdTopicUrl":string // SQS URL of
|
|
9
|
+
// "pluginExtensionPointCmdTopicUrl":string // SQS URL of PlatformPluginExtPoint cmd topic (admin's Plugin EP)
|
|
10
10
|
// "eventTopicArn": string // SNS ARN the EP's outgoing events publish to ("NOT_AVAILABLE" if none)
|
|
11
11
|
// "pluginReadModelTableName": string // DynamoDB table for Plugin RM (used by QueryEngine.scan)
|
|
12
12
|
// "pluginSchemaPersistenceTableName":string // DynamoDB table holding deploy-time SDL fragments
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
// "connectExtension": { // The auto-included PluginConnectExtension entry; null for admin Lambda
|
|
31
31
|
// "specModule": string,
|
|
32
32
|
// "mappingsModule": string,
|
|
33
|
-
// "extensionPointName": string // service key for incomingConnectExtensionEventHandlers (e.g. "
|
|
33
|
+
// "extensionPointName": string // service key for incomingConnectExtensionEventHandlers (e.g. "Platform.Plugin")
|
|
34
34
|
// } | null,
|
|
35
35
|
// "extensions": [ // User-declared extensions — wired into incoming/outgoing dicts at cold start
|
|
36
36
|
// {
|
|
@@ -14,7 +14,7 @@ let make: ReventlessCore.Heartbeat_Adapter.runnerMaker<runtimeParts> = (
|
|
|
14
14
|
EventRule.make(
|
|
15
15
|
~name=Pulumi.Pulumi.getStackName() ++ ("-" ++ name),
|
|
16
16
|
~args={
|
|
17
|
-
description: "Send a heartbeat to the
|
|
17
|
+
description: "Send a heartbeat to the Platform Plugin ExtensionPoint"->Pulumi.Input.make,
|
|
18
18
|
scheduleExpression: EventRule.ScheduleExpression.every(timeout->Minutes),
|
|
19
19
|
tags: AWS.Tags.make(
|
|
20
20
|
~name=Pulumi.Pulumi.getStackName() ++ ("-" ++ name),
|
|
@@ -29,14 +29,14 @@ let make: ReventlessCore.Heartbeat_Adapter.runnerMaker<runtimeParts> = (
|
|
|
29
29
|
|
|
30
30
|
let lambda = runtime.parts.lambda
|
|
31
31
|
let lambdaRole = runtime.parts.lambdaRole
|
|
32
|
-
let
|
|
32
|
+
let platformSqsQueue = remoteChannel.resources->Util_SQS.findResolvedResource
|
|
33
33
|
|
|
34
|
-
// Grant sqs:SendMessage on the
|
|
35
|
-
// TOP LEVEL. Previously this RolePolicy was created inside the
|
|
34
|
+
// Grant sqs:SendMessage on the Platform Plugin ExtensionPoint command topic
|
|
35
|
+
// at TOP LEVEL. Previously this RolePolicy was created inside the
|
|
36
36
|
// `Pulumi.Output.apply` below — and a resource created inside an apply
|
|
37
37
|
// callback does not reliably register with the engine, which intermittently
|
|
38
|
-
// left the heartbeat Lambda without this grant (IAM AccessDenied
|
|
39
|
-
//
|
|
38
|
+
// left the heartbeat Lambda without this grant (IAM AccessDenied on the
|
|
39
|
+
// extension point's command-topic queue). `platformSqsQueue.urn` is an
|
|
40
40
|
// already-resolved ARN string from the remote channel and `lambdaRole.id` an
|
|
41
41
|
// Output, so neither needs an apply. Mirrors the EC `pta` grant fix — see
|
|
42
42
|
// docs/analysis/ec-publish-to-aggregates-grant-broken.md.
|
|
@@ -48,7 +48,7 @@ let make: ReventlessCore.Heartbeat_Adapter.runnerMaker<runtimeParts> = (
|
|
|
48
48
|
sid: "AllowLambdaToSendSQS",
|
|
49
49
|
effect: Allow,
|
|
50
50
|
actions: Action("sqs:SendMessage"),
|
|
51
|
-
resources: Resource(
|
|
51
|
+
resources: Resource(platformSqsQueue.urn),
|
|
52
52
|
},
|
|
53
53
|
],
|
|
54
54
|
)
|
|
@@ -20,7 +20,7 @@ import * as Cloudwatch_EventTarget$PulumiAws from "@reventlessdev/rescript-pulum
|
|
|
20
20
|
function make(name, remoteChannel, timeout, runtime, opts) {
|
|
21
21
|
let opts$1 = Util_Pulumi$ReventlessCore.ComponentResourceOptions.toCustomResourceOptions(opts);
|
|
22
22
|
let cloudwatchEventRule = new (Aws.cloudwatch.EventRule)(Pulumi.getStack() + ("-" + name), {
|
|
23
|
-
description: "Send a heartbeat to the
|
|
23
|
+
description: "Send a heartbeat to the Platform Plugin ExtensionPoint",
|
|
24
24
|
scheduleExpression: Primitive_option.some(Cloudwatch_EventRule$PulumiAws.ScheduleExpression.every({
|
|
25
25
|
TAG: "Minutes",
|
|
26
26
|
_0: timeout
|
|
@@ -29,12 +29,12 @@ function make(name, remoteChannel, timeout, runtime, opts) {
|
|
|
29
29
|
}, opts$1);
|
|
30
30
|
let lambda = runtime.parts.lambda;
|
|
31
31
|
let lambdaRole = runtime.parts.lambdaRole;
|
|
32
|
-
let
|
|
32
|
+
let platformSqsQueue = Util_SQS$ReventlessAws.findResolvedResource(remoteChannel.resources);
|
|
33
33
|
let heartbeatLambdaSendMessagePolicyDocument = PolicyDocument$PulumiAws.make(undefined, undefined, [{
|
|
34
34
|
Sid: "AllowLambdaToSendSQS",
|
|
35
35
|
Effect: "Allow",
|
|
36
36
|
Action: "sqs:SendMessage",
|
|
37
|
-
Resource:
|
|
37
|
+
Resource: platformSqsQueue.urn
|
|
38
38
|
}]);
|
|
39
39
|
new (Aws.iam.RolePolicy)(name + "RolePolicy", {
|
|
40
40
|
policy: PolicyDocument$PulumiAws.mergePolicyDocuments(name + "Policy", [
|
|
@@ -608,7 +608,7 @@ module Make = (
|
|
|
608
608
|
|
|
609
609
|
// Plugin EC sqs:SendMessage grants on the aggregate / StateChangeSlice
|
|
610
610
|
// command-topic queues that user extensions publish to. The default
|
|
611
|
-
// AllowLambdaSendSQS only covers
|
|
611
|
+
// AllowLambdaSendSQS only covers PlatformPluginExtPointCmdTopic (added because
|
|
612
612
|
// the auto-included Connect extension publishes there), so without this
|
|
613
613
|
// grant every cross-plugin extension's first command publish fails with
|
|
614
614
|
// IAM AccessDenied (e.g. Catalog's Orders_Extension → RecordProductDemand).
|