@reventlessdev/reventless-aws 3.0.0-alpha.373 → 3.0.0-alpha.375
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 +10 -10
- package/src/Platform.res +1 -1
- package/src/Platform_Stack.res +3 -3
- package/src/adapter/Auth/Auth_ActiveRolePoolAttachment.res +1 -1
- package/src/adapter/Auth/Auth_ActiveRoleStore.res +2 -2
- package/src/adapter/Auth/Auth_ActiveRoleStore_Ops.res +1 -1
- package/src/adapter/Auth/Auth_ActiveRoleStore_Schema.res +1 -1
- package/src/adapter/Auth/Auth_ActiveRoleTrigger.res +1 -1
- package/src/adapter/Auth/Auth_ActiveRoleTrigger_Ops.res +1 -1
- package/src/adapter/DcbEventLog/DcbEventLogStorage_DynamoDb.res +1 -1
- package/src/adapter/DcbEventLog/DcbEventLogStorage_DynamoDb_Runtime.res +1 -1
- package/tests/Auth_ActiveRoleStoreTest.res +1 -1
- package/tests/integration/DcbEventLogStorage_DynamoDb_IntegrationTest.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.375 (2026-10-08)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @reventlessdev/reventless-aws
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# 3.0.0-alpha.374 (2026-10-06)
|
|
15
|
+
|
|
16
|
+
**Note:** Version bump only for package @reventlessdev/reventless-aws
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
6
22
|
# 3.0.0-alpha.373 (2026-10-05)
|
|
7
23
|
|
|
8
24
|
### Bug Fixes
|
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.375",
|
|
4
4
|
"description": "AWS adapters for Reventless",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"bin": {
|
|
@@ -22,19 +22,19 @@
|
|
|
22
22
|
"sury": "11.0.0",
|
|
23
23
|
"uuid": "^13.0.0",
|
|
24
24
|
"yaml": "^2.8.3",
|
|
25
|
-
"@reventlessdev/rescript-aws-sdk": "3.0.0-alpha.
|
|
26
|
-
"@reventlessdev/rescript-jest": "1.0.0-alpha.11",
|
|
25
|
+
"@reventlessdev/rescript-aws-sdk": "3.0.0-alpha.29",
|
|
27
26
|
"@reventlessdev/rescript-effect": "0.1.0-alpha.34",
|
|
28
|
-
"@reventlessdev/rescript-node": "2.0.0-alpha.
|
|
29
|
-
"@reventlessdev/rescript-pulumi-aws": "3.0.0-alpha.
|
|
27
|
+
"@reventlessdev/rescript-node": "2.0.0-alpha.21",
|
|
28
|
+
"@reventlessdev/rescript-pulumi-aws": "3.0.0-alpha.24",
|
|
29
|
+
"@reventlessdev/rescript-jest": "1.0.0-alpha.11",
|
|
30
30
|
"@reventlessdev/rescript-pulumi-pulumi": "2.3.0-alpha.23",
|
|
31
|
-
"@reventlessdev/rescript-uuid": "2.0.0-alpha.1",
|
|
32
31
|
"@reventlessdev/rescript-web": "1.0.0-alpha.7",
|
|
33
|
-
"@reventlessdev/
|
|
34
|
-
"@reventlessdev/reventless-
|
|
35
|
-
"@reventlessdev/reventless-infra": "3.0.0-alpha.
|
|
32
|
+
"@reventlessdev/rescript-uuid": "2.0.0-alpha.1",
|
|
33
|
+
"@reventlessdev/reventless-core": "3.0.0-alpha.289",
|
|
34
|
+
"@reventlessdev/reventless-infra": "3.0.0-alpha.186",
|
|
35
|
+
"@reventlessdev/reventless-spec": "3.0.0-alpha.158",
|
|
36
36
|
"@reventlessdev/reventless-interop": "3.0.0-alpha.39",
|
|
37
|
-
"@reventlessdev/reventless-
|
|
37
|
+
"@reventlessdev/reventless-postgres": "3.0.0-alpha.153"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"rescript": "12.3.1",
|
package/src/Platform.res
CHANGED
|
@@ -2543,7 +2543,7 @@ module MakeWithConfig = (
|
|
|
2543
2543
|
}
|
|
2544
2544
|
|
|
2545
2545
|
// Where a caller records the role they want to act as
|
|
2546
|
-
// (docs/plans/active-role-narrows-the-token.md §6). The mutation only writes
|
|
2546
|
+
// (docs/plans/done/active-role-narrows-the-token.md §6). The mutation only writes
|
|
2547
2547
|
// a preference; the pre-token-generation trigger reads the row and re-checks
|
|
2548
2548
|
// it against real membership before narrowing anything, so this door grants
|
|
2549
2549
|
// nobody anything on its own.
|
package/src/Platform_Stack.res
CHANGED
|
@@ -149,7 +149,7 @@ let _resolveUncached = (): cognitoUserPool => {
|
|
|
149
149
|
// Provisioned ahead of the pool in both pool modes: the pre-token-generation
|
|
150
150
|
// trigger reads these rows, and in auto mode the pool is declared carrying the
|
|
151
151
|
// trigger's ARN — so table → trigger → pool is a forced order, not a choice.
|
|
152
|
-
// See [docs/plans/active-role-narrows-the-token.md] §6.
|
|
152
|
+
// See [docs/plans/done/active-role-narrows-the-token.md] §6.
|
|
153
153
|
//
|
|
154
154
|
// Unconditional, including for a unified-API platform that mounts no
|
|
155
155
|
// `Platform_SetActiveRole` and so can never write a row.
|
|
@@ -174,7 +174,7 @@ let _resolveUncached = (): cognitoUserPool => {
|
|
|
174
174
|
// provider: named by derivation from the provider id, looked up rather than
|
|
175
175
|
// created, and provisioned outside every stack alongside the pool itself. See
|
|
176
176
|
// [Auth_ActiveRoleStore.chooseStore] and
|
|
177
|
-
// [docs/plans/active-role-store-scoped-to-the-pool.md].
|
|
177
|
+
// [docs/plans/done/active-role-store-scoped-to-the-pool.md].
|
|
178
178
|
let activeRoleTable = Auth_ActiveRoleStore.resolveTable(
|
|
179
179
|
~choice=Auth_ActiveRoleStore.chooseStore(~identityProviderId=existingPoolId),
|
|
180
180
|
~opts={},
|
|
@@ -363,7 +363,7 @@ let _resolveUncached = (): cognitoUserPool => {
|
|
|
363
363
|
//
|
|
364
364
|
// `Arn` survives the rename on purpose — the value *is* an ARN, and `urn` in a
|
|
365
365
|
// Pulumi codebase already means the Pulumi URN every resource carries. See
|
|
366
|
-
// [docs/plans/active-role-store-scoped-to-the-pool.md] step 7.
|
|
366
|
+
// [docs/plans/done/active-role-store-scoped-to-the-pool.md] step 7.
|
|
367
367
|
let managedStr = Pulumi.Output.make(result.managed ? "true" : "false")
|
|
368
368
|
let regionOutput = Pulumi.Output.make(regionStr)
|
|
369
369
|
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
writes — every role switch reporting success and doing nothing. So the
|
|
25
25
|
describe this already performs is also read for *what is attached*, and a
|
|
26
26
|
slot held by anything else fails the deploy naming it. See [classifySlot] and
|
|
27
|
-
[docs/plans/active-role-store-scoped-to-the-pool.md].
|
|
27
|
+
[docs/plans/done/active-role-store-scoped-to-the-pool.md].
|
|
28
28
|
|
|
29
29
|
🚨 **`UpdateUserPool` resets by omission.** The API requires "a value for all
|
|
30
30
|
parameters that you don't want set to a default value". An attach that sends
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// The role a caller chose to act as, as server-side state — and the one door
|
|
2
|
-
// that writes it. See [docs/plans/active-role-narrows-the-token.md] §6.
|
|
2
|
+
// that writes it. See [docs/plans/done/active-role-narrows-the-token.md] §6.
|
|
3
3
|
//
|
|
4
4
|
// Why state rather than a parameter on the token request: Cognito "doesn't
|
|
5
5
|
// include data from the ClientMetadata parameter in AdminInitiateAuth and
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
//
|
|
33
33
|
// 🚨 **The rows follow the identity provider, not the stack** — see
|
|
34
34
|
// [ReventlessCore.Auth_ActiveRole] for the contract and
|
|
35
|
-
// [docs/plans/active-role-store-scoped-to-the-pool.md] for the defect that
|
|
35
|
+
// [docs/plans/done/active-role-store-scoped-to-the-pool.md] for the defect that
|
|
36
36
|
// produced it. A pool holds one pre-token-generation trigger, so two stacks
|
|
37
37
|
// sharing a pool with a table each have the winning trigger reading rows the
|
|
38
38
|
// serving resolver never wrote: every switch succeeds and does nothing.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// and Pulumi-free so it ships as an EntryPoint module (`Auth_ActiveRoleStore`
|
|
3
3
|
// bundles it and attaches it as the domain API's Lambda data source). See
|
|
4
4
|
// [Upload_Presign_S3_Ops.res] for why an EntryPoint rather than a serialized
|
|
5
|
-
// closure, and [docs/plans/active-role-narrows-the-token.md] §6 for the design.
|
|
5
|
+
// closure, and [docs/plans/done/active-role-narrows-the-token.md] §6 for the design.
|
|
6
6
|
//
|
|
7
7
|
// What this writes is a *preference*, not a token. Cognito mints the token, and
|
|
8
8
|
// the pre-token-generation trigger ([Auth_ActiveRoleTrigger_Ops.res]) reads this
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// The active-role store's identity: what it is called, and how its rows are
|
|
2
|
-
// keyed. See [docs/plans/active-role-store-scoped-to-the-pool.md].
|
|
2
|
+
// keyed. See [docs/plans/done/active-role-store-scoped-to-the-pool.md].
|
|
3
3
|
//
|
|
4
4
|
// 🚨 **One definition, four consumers, and that is the whole reason this file
|
|
5
5
|
// exists.** The deploy creates or looks the table up ([Auth_ActiveRoleStore]),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Deploy-time half of the Cognito pre-token-generation trigger — the Lambda that
|
|
2
2
|
// narrows `cognito:groups` to the role a caller chose. Runtime logic lives in
|
|
3
3
|
// [Auth_ActiveRoleTrigger_Ops.res]; see
|
|
4
|
-
// [docs/plans/active-role-narrows-the-token.md] §6.
|
|
4
|
+
// [docs/plans/done/active-role-narrows-the-token.md] §6.
|
|
5
5
|
//
|
|
6
6
|
// `make` provisions the function and its execution role (Logs + a read of the
|
|
7
7
|
// one role-state table). It does **not** attach itself to a user pool, and does
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Runtime handler for the Cognito **pre token generation** trigger — the AWS
|
|
2
2
|
// minting point for "acting as one of the roles you hold". See
|
|
3
|
-
// [docs/plans/active-role-narrows-the-token.md] §6.
|
|
3
|
+
// [docs/plans/done/active-role-narrows-the-token.md] §6.
|
|
4
4
|
//
|
|
5
5
|
// Compiled, type-checked and Pulumi-free so it ships as an EntryPoint module
|
|
6
6
|
// ([Auth_ActiveRoleTrigger.res] bundles it and attaches it to the user pool).
|
|
@@ -29,7 +29,7 @@ let make: ReventlessCore.DcbEventLog_Adapter.storageMaker = (
|
|
|
29
29
|
// partition), and a future cross-partition secondary-tag read (Phase 7) goes
|
|
30
30
|
// `Query` (keys) → `BatchGetItem` (payloads against the base table). KEYS_ONLY
|
|
31
31
|
// drops the per-GSI event-payload storage multiplier and most of the per-write
|
|
32
|
-
// WCU while keeping the index queryable. See docs/plans/dcb-consistency-hardening.md
|
|
32
|
+
// WCU while keeping the index queryable. See docs/plans/done/dcb-consistency-hardening.md
|
|
33
33
|
// Phase 3.
|
|
34
34
|
let globalSecondaryIndexes =
|
|
35
35
|
indexes
|
|
@@ -49,7 +49,7 @@ let tagToAttributeName = (tagKey: string) => `tag_${tagKey}`
|
|
|
49
49
|
// reads resolve events directly from it. The per-tag `tag_<key>` GSIs are
|
|
50
50
|
// `KEYS_ONLY` — no reader today, and Phase 7's cross-partition read goes
|
|
51
51
|
// `Query`(keys) → `BatchGetItem`(payloads). Pure predicate so it is unit-testable
|
|
52
|
-
// without the Pulumi deploy layer. See docs/plans/dcb-consistency-hardening.md Phase 3.
|
|
52
|
+
// without the Pulumi deploy layer. See docs/plans/done/dcb-consistency-hardening.md Phase 3.
|
|
53
53
|
let compositeIndexName = "tag_composite"
|
|
54
54
|
let indexKeepsFullProjection = (indexName: string): bool => indexName == compositeIndexName
|
|
55
55
|
|
|
@@ -79,7 +79,7 @@ describe("Auth_ActiveRoleStore_Ops.cognitoLookupName", () => {
|
|
|
79
79
|
// Which store this deployment reads and writes. Two cases and no third: a stack
|
|
80
80
|
// that creates its own provider owns everything attached to it, and a stack given
|
|
81
81
|
// a provider owns none of it. See
|
|
82
|
-
// [docs/plans/active-role-store-scoped-to-the-pool.md].
|
|
82
|
+
// [docs/plans/done/active-role-store-scoped-to-the-pool.md].
|
|
83
83
|
describe("Auth_ActiveRoleStore.chooseStore", () => {
|
|
84
84
|
testSync("a stack that creates its own provider keeps its own table", () =>
|
|
85
85
|
expect(Auth_ActiveRoleStore.chooseStore(~identityProviderId=None))->toEqual(
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
// is the only thing that proves the fence-scope model (Issue 1 fix) and the
|
|
17
17
|
// optimistic-concurrency guarantees end-to-end. See
|
|
18
18
|
// `docs/analysis/dcb-consistency-check-issues.md` and
|
|
19
|
-
// `docs/plans/dcb-consistency-hardening.md` (Phase 1).
|
|
19
|
+
// `docs/plans/done/dcb-consistency-hardening.md` (Phase 1).
|
|
20
20
|
|
|
21
21
|
open JestGlobals
|
|
22
22
|
|