@reventlessdev/reventless-infra 3.0.0-alpha.203 → 3.0.0-alpha.205

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,28 @@
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.205 (2026-10-25)
7
+
8
+ * refactor(aws)!: deploy and runtime configuration a function may lack are optional fields ([de80a54](https://github.com/ReventlessDev/reventless-core/commit/de80a546501a97b39cbe71200120f062bb260da4))
9
+ ### Features
10
+
11
+ * a plugin declares per role how a person is admitted, and the local platform honors the self-service and provisioned halves ([9c37bf5](https://github.com/ReventlessDev/reventless-core/commit/9c37bf50f15cac1703bf2c351713518121a56211))
12
+ * a stash capability holds a value for minutes outside the log and hands it over once ([627f285](https://github.com/ReventlessDev/reventless-core/commit/627f28529ead2d2d31bdd091c9f42e7faca40f6f))
13
+
14
+ ### BREAKING CHANGES
15
+
16
+ * code that builds these records drops `name: None` and
17
+ writes `name: x` for `name: Some(x)`.
18
+
19
+
20
+
21
+ # 3.0.0-alpha.204 (2026-10-23)
22
+
23
+ ### Features
24
+
25
+ * **aws:** a slice declaring the identity provider is handed one over the platform's Cognito pool ([b3a933b](https://github.com/ReventlessDev/reventless-core/commit/b3a933bbda475d0ce932a8de30616f738d639417))
26
+
27
+
6
28
  # 3.0.0-alpha.203 (2026-10-22)
7
29
 
8
30
  ### Features
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reventlessdev/reventless-infra",
3
- "version": "3.0.0-alpha.203",
3
+ "version": "3.0.0-alpha.205",
4
4
  "description": "Infrastructure types for Reventless framework",
5
5
  "license": "Apache-2.0",
6
6
  "jest": {
@@ -16,10 +16,10 @@
16
16
  "sury": "11.0.0",
17
17
  "sury-ppx": "11.0.0",
18
18
  "uuid": "^13.0.0",
19
- "@reventlessdev/rescript-effect": "1.0.0-alpha.1",
20
19
  "@reventlessdev/rescript-pulumi-pulumi": "3.0.0-alpha.0",
21
20
  "@reventlessdev/rescript-uuid": "2.0.0-alpha.1",
22
- "@reventlessdev/reventless-spec": "3.0.0-alpha.175"
21
+ "@reventlessdev/reventless-spec": "3.0.0-alpha.176",
22
+ "@reventlessdev/rescript-effect": "1.0.0-alpha.1"
23
23
  },
24
24
  "devDependencies": {
25
25
  "rescript": "12.3.1",
@@ -97,5 +97,7 @@ module type T = {
97
97
  ~componentChapters: dict<string>=?,
98
98
  ~lifecycleModel: array<Reventless.Plugin.derivedEdge>=?,
99
99
  ~identities: array<string>=?,
100
+ ~admission: Reventless.Admission.t=?,
101
+ ~admissionDoors: array<(string, Reventless.Admission.door)>=?,
100
102
  ) => Reventless.Plugin.pluginStructure
101
103
  }
@@ -110,6 +110,7 @@ type capability =
110
110
  | Geocoding
111
111
  | Messaging
112
112
  | IdentityProvider
113
+ | Stash
113
114
 
114
115
  // A provisioned geocoding place index, as returned by the framework's geocoding
115
116
  // capability helper. A record rather than a bare name so the handle can grow
@@ -477,10 +478,10 @@ module type T = {
477
478
  messagingSender?: messagingSender,
478
479
  // Optional identity provider for the unattended slice path: making,
479
480
  // grouping and unmaking principals. A provider that runs in the platform's
480
- // own process, which is why only the in-memory platform hosts one today
481
+ // own process, so only the in-memory platform reads it
481
482
  // (`Capability_IdentityProvider_UserStore.make()`, over the accounts file
482
- // its login reads). The AWS deploy ignores it until a pool-backed handle
483
- // exists; a plugin declaring the need is refused there by the deploy gate.
483
+ // its login reads). The AWS deploy ignores it: its pool always exists, and a
484
+ // plugin declaring the need is handed a provider over that pool.
484
485
  identityProvider?: Reventless.IdentityProvider.t,
485
486
  // Optional object store for direct-to-store uploads. When set, the deploy
486
487
  // provisions a presign service against it, threads that service's URL into
@@ -11,12 +11,12 @@ not a literal cap — each platform adapter maps it to its own resource model
11
11
  See docs/plans/configurable-component-runtime-resources.md.
12
12
  */
13
13
  type t = {
14
- memorySize: option<int>,
15
- timeout: option<int>,
14
+ memorySize?: int,
15
+ timeout?: int,
16
16
  }
17
17
 
18
18
  /** No hints — every field falls through to the per-kind builder default. */
19
- let empty: t = {memorySize: None, timeout: None}
19
+ let empty: t = {}
20
20
 
21
21
  /**
22
22
  Resolve a component's memory floor: the per-component override raises the
@@ -25,7 +25,7 @@ the default unchanged.
25
25
  */
26
26
  let resolveMemory = (hints: option<t>, ~default: int): int =>
27
27
  switch hints {
28
- | Some({memorySize: Some(m)}) => Math.Int.max(default, m)
28
+ | Some({memorySize: ?Some(m)}) => Math.Int.max(default, m)
29
29
  | _ => default
30
30
  }
31
31
 
@@ -36,6 +36,6 @@ override yields the default unchanged.
36
36
  */
37
37
  let resolveTimeout = (hints: option<t>, ~default: int): int =>
38
38
  switch hints {
39
- | Some({timeout: Some(t)}) => t
39
+ | Some({timeout: ?Some(t)}) => t
40
40
  | _ => default
41
41
  }
@@ -25,10 +25,7 @@ function resolveTimeout(hints, $$default) {
25
25
  }
26
26
  }
27
27
 
28
- let empty = {
29
- memorySize: undefined,
30
- timeout: undefined
31
- };
28
+ let empty = {};
32
29
 
33
30
  export {
34
31
  empty,
@@ -12,23 +12,19 @@ describe("RuntimeHints.resolveMemory", () => {
12
12
  expect(RH.resolveMemory(None, ~default=1024))->toBe(1024)
13
13
  })
14
14
  testSync("an override above the default wins", () => {
15
- expect(RH.resolveMemory(Some({memorySize: Some(2048), timeout: None}), ~default=1024))->toBe(
16
- 2048,
17
- )
15
+ expect(RH.resolveMemory(Some({memorySize: 2048}), ~default=1024))->toBe(2048)
18
16
  })
19
17
  testSync("an override below the default is clamped up to the floor", () => {
20
- expect(RH.resolveMemory(Some({memorySize: Some(256), timeout: None}), ~default=1024))->toBe(
21
- 1024,
22
- )
18
+ expect(RH.resolveMemory(Some({memorySize: 256}), ~default=1024))->toBe(1024)
23
19
  })
24
20
  testSync("an absent memorySize field falls through to the default", () => {
25
- expect(RH.resolveMemory(Some({memorySize: None, timeout: Some(60)}), ~default=1024))->toBe(1024)
21
+ expect(RH.resolveMemory(Some({timeout: 60}), ~default=1024))->toBe(1024)
26
22
  })
27
23
  })
28
24
 
29
25
  describe("RuntimeHints.resolveTimeout", () => {
30
26
  testSync("an explicit timeout replaces the default (no max)", () => {
31
- expect(RH.resolveTimeout(Some({memorySize: None, timeout: Some(15)}), ~default=30))->toBe(15)
27
+ expect(RH.resolveTimeout(Some({timeout: 15}), ~default=30))->toBe(15)
32
28
  })
33
29
  testSync("no hint falls through to the default", () => {
34
30
  expect(RH.resolveTimeout(None, ~default=30))->toBe(30)