@reventlessdev/reventless-infra 3.0.0-alpha.153 → 3.0.0-alpha.155
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 +22 -0
- package/package.json +3 -3
- package/src/components/Api.res +0 -24
- package/src/components/Api.res.mjs +0 -16
- package/src/types/Platform.res +23 -2
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.155 (2026-09-02)
|
|
7
|
+
|
|
8
|
+
* feat(aws)!: the messaging sender is configuration, and a stack can choose to only log ([23b8b4b](https://github.com/ReventlessDev/reventless-core/commit/23b8b4bfe9c70555de4d74266ca686cb427485ca))
|
|
9
|
+
|
|
10
|
+
### BREAKING CHANGES
|
|
11
|
+
|
|
12
|
+
* `Capability_Messaging_Ses.make` is replaced by
|
|
13
|
+
`Capability_Messaging.make(~name)`, which reads the transport and the address
|
|
14
|
+
from config; the SES module keeps only `emailSender`. A deployment that named its
|
|
15
|
+
sender in code must move it to `platform:messagingEmailSender` or the deploy is
|
|
16
|
+
refused.
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
# 3.0.0-alpha.154 (2026-09-01)
|
|
21
|
+
|
|
22
|
+
**Note:** Version bump only for package @reventlessdev/reventless-infra
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
6
28
|
# 3.0.0-alpha.153 (2026-09-01)
|
|
7
29
|
|
|
8
30
|
### Bug Fixes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reventlessdev/reventless-infra",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.155",
|
|
4
4
|
"description": "Infrastructure types for Reventless framework",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"jest": {
|
|
@@ -17,9 +17,9 @@
|
|
|
17
17
|
"sury-ppx": "11.0.0-rc.2",
|
|
18
18
|
"uuid": "^13.0.0",
|
|
19
19
|
"@reventlessdev/rescript-effect": "0.1.0-alpha.32",
|
|
20
|
-
"@reventlessdev/
|
|
20
|
+
"@reventlessdev/rescript-pulumi-pulumi": "2.3.0-alpha.19",
|
|
21
21
|
"@reventlessdev/rescript-uuid": "2.0.0-alpha.0",
|
|
22
|
-
"@reventlessdev/
|
|
22
|
+
"@reventlessdev/reventless-spec": "3.0.0-alpha.127"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"rescript": "12.3.0",
|
package/src/components/Api.res
CHANGED
|
@@ -19,16 +19,6 @@ let noApiVariantsId: S.Metadata.Id.t<Set.t<string>> =
|
|
|
19
19
|
let noApiVariantId: S.Metadata.Id.t<bool> =
|
|
20
20
|
S.Metadata.Id.make(~namespace="api", ~name="noApiVariant")
|
|
21
21
|
|
|
22
|
-
/** Internal sury metadata ID storing per-variant allowed-state lists for AutoUI command filtering.
|
|
23
|
-
Maps variant name → set of status values under which the command is meaningful. */
|
|
24
|
-
let allowedStatesId: S.Metadata.Id.t<dict<array<string>>> =
|
|
25
|
-
S.Metadata.Id.make(~namespace="api", ~name="allowedStates")
|
|
26
|
-
|
|
27
|
-
/** Internal sury metadata ID storing per-variant target-state values for AutoUI board
|
|
28
|
-
transitions. Maps variant name → the single status the command's handler writes. */
|
|
29
|
-
let targetStateId: S.Metadata.Id.t<dict<string>> =
|
|
30
|
-
S.Metadata.Id.make(~namespace="api", ~name="targetState")
|
|
31
|
-
|
|
32
22
|
/** PPX helper: attaches the noApi flag to a command schema. Called by generated code. */
|
|
33
23
|
let markNoApi = (schema: S.t<'a>): S.t<'a> =>
|
|
34
24
|
schema->S.Metadata.set(~id=noApiId, true)
|
|
@@ -88,20 +78,6 @@ let markNoApiVariants = (schema: S.t<'a>, variants: array<string>): S.t<'a> => {
|
|
|
88
78
|
marked->S.Metadata.set(~id=noApiVariantsId, excluded)
|
|
89
79
|
}
|
|
90
80
|
|
|
91
|
-
/** PPX helper: attaches per-variant allowedStates to a command schema. Called by generated code
|
|
92
|
-
emitted from the from-set of an @transition attribute. Each entry is (variantName, allowedStateNames). */
|
|
93
|
-
let markAllowedStates = (
|
|
94
|
-
schema: S.t<'a>,
|
|
95
|
-
entries: array<(string, array<string>)>,
|
|
96
|
-
): S.t<'a> => schema->S.Metadata.set(~id=allowedStatesId, Dict.fromArray(entries))
|
|
97
|
-
|
|
98
|
-
/** PPX helper: attaches per-variant targetState to a command schema. Called by generated code
|
|
99
|
-
emitted from the target of an @transition attribute. Each entry is (variantName, targetStateName). */
|
|
100
|
-
let markTargetState = (
|
|
101
|
-
schema: S.t<'a>,
|
|
102
|
-
entries: array<(string, string)>,
|
|
103
|
-
): S.t<'a> => schema->S.Metadata.set(~id=targetStateId, Dict.fromArray(entries))
|
|
104
|
-
|
|
105
81
|
/** Type alias for schema fragments (re-exports Plugin.apiSchemaFragment). */
|
|
106
82
|
type schemaFragment = Reventless.Plugin.apiSchemaFragment
|
|
107
83
|
|
|
@@ -9,10 +9,6 @@ let noApiVariantsId = Sury.$Metadata_Id_make("api", "noApiVariants");
|
|
|
9
9
|
|
|
10
10
|
let noApiVariantId = Sury.$Metadata_Id_make("api", "noApiVariant");
|
|
11
11
|
|
|
12
|
-
let allowedStatesId = Sury.$Metadata_Id_make("api", "allowedStates");
|
|
13
|
-
|
|
14
|
-
let targetStateId = Sury.$Metadata_Id_make("api", "targetState");
|
|
15
|
-
|
|
16
12
|
function markNoApi(schema) {
|
|
17
13
|
return Sury.$Metadata_set(schema, noApiId, true);
|
|
18
14
|
}
|
|
@@ -54,24 +50,12 @@ function markNoApiVariants(schema, variants) {
|
|
|
54
50
|
return Sury.$Metadata_set(marked, noApiVariantsId, excluded);
|
|
55
51
|
}
|
|
56
52
|
|
|
57
|
-
function markAllowedStates(schema, entries) {
|
|
58
|
-
return Sury.$Metadata_set(schema, allowedStatesId, Object.fromEntries(entries));
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
function markTargetState(schema, entries) {
|
|
62
|
-
return Sury.$Metadata_set(schema, targetStateId, Object.fromEntries(entries));
|
|
63
|
-
}
|
|
64
|
-
|
|
65
53
|
export {
|
|
66
54
|
noApiId,
|
|
67
55
|
noApiVariantsId,
|
|
68
56
|
noApiVariantId,
|
|
69
|
-
allowedStatesId,
|
|
70
|
-
targetStateId,
|
|
71
57
|
markNoApi,
|
|
72
58
|
variantNameOf,
|
|
73
59
|
markNoApiVariants,
|
|
74
|
-
markAllowedStates,
|
|
75
|
-
markTargetState,
|
|
76
60
|
}
|
|
77
61
|
/* noApiId Not a pure module */
|
package/src/types/Platform.res
CHANGED
|
@@ -189,12 +189,33 @@ capability helper.
|
|
|
189
189
|
`emailSender` is the verified address messages are sent *from* — a provider-side
|
|
190
190
|
identity, not something an application picks per message, which is why it is a
|
|
191
191
|
deploy-time handle rather than a field on `Messaging.message`. Absent when the
|
|
192
|
-
deployment provisions no email channel.
|
|
192
|
+
deployment provisions no email channel. It carries the whole `From:` header, so
|
|
193
|
+
a deployment that configured a display name has it here rather than at the send.
|
|
193
194
|
|
|
194
195
|
The channel set is derived from which senders are present rather than declared
|
|
195
196
|
beside them, so a handle carrying no sender at all cannot claim a channel.
|
|
197
|
+
|
|
198
|
+
`smsSender` is the origination number or sender id, on the same terms — with the
|
|
199
|
+
difference that **no transport reads it yet**. It is carried so a stack can state
|
|
200
|
+
the number where the other senders live, and so the field exists before the
|
|
201
|
+
backend that needs it; the SMS channel appears when that backend does, not when
|
|
202
|
+
this is set. A channel claimed ahead of its transport would collect preferences
|
|
203
|
+
that silently deliver nothing, which is the failure the derived channel set above
|
|
204
|
+
exists to prevent.
|
|
205
|
+
|
|
206
|
+
`emailProvider` names the transport behind the email sender — the value a runtime
|
|
207
|
+
reads to decide which backend to build. Per channel, like the senders themselves:
|
|
208
|
+
an SMS transport is a separate choice, and one key for both would make choosing a
|
|
209
|
+
mail sink also choose how texts go out. On the handle rather than resolved separately at
|
|
210
|
+
each end, so the address and the thing that will send it are provisioned as one
|
|
211
|
+
answer: a platform that read the choice from config itself could disagree with
|
|
212
|
+
the helper that read the address.
|
|
196
213
|
*/
|
|
197
|
-
type messagingSender = {
|
|
214
|
+
type messagingSender = {
|
|
215
|
+
emailSender?: Pulumi.Input.t<string>,
|
|
216
|
+
smsSender?: Pulumi.Input.t<string>,
|
|
217
|
+
emailProvider?: Pulumi.Input.t<string>,
|
|
218
|
+
}
|
|
198
219
|
|
|
199
220
|
// Options for the shell's map view mode. Written to config.json flat, beside
|
|
200
221
|
// `viewModes`, because that is where the shell reads them; carried on the arm
|