@reventlessdev/reventless-aws 3.0.0-alpha.418 → 3.0.0-alpha.420
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 +14 -0
- package/package.json +10 -10
- package/src/adapter/CommandTopic/CommandTopicChannel_SQS_Runtime.res.mjs +3 -3
- package/src/adapter/EventCollector/EventCollectorChannel_SQS_Runtime.res.mjs +2 -2
- package/src/adapter/EventLog/EventLogStorage_DynamoDb_Runtime.res.mjs +1 -1
- package/src/adapter/QueryDb/QueryDbStorage_DynamoDb_Runtime.res.mjs +14 -14
- package/src/adapter/QueryEngine/QueryEngine_DynamoDb.res.mjs +4 -4
- package/src/adapter/Runtime/AutomationSliceEntryPoint_Ops.res +6 -2
- package/src/adapter/Runtime/AutomationSliceEntryPoint_Ops.res.mjs +11 -7
- package/src/adapter/Runtime/DcbCommandTopicEntryPoint_Ops.res.mjs +3 -3
- package/src/adapter/Runtime/StateViewSliceEntryPoint_Ops.res +39 -8
- package/src/adapter/Runtime/StateViewSliceEntryPoint_Ops.res.mjs +31 -6
- package/src/adapter/ScheduledPublisher/ScheduledPublisher_EventBridgeScheduler_Runtime.res.mjs +1 -1
- package/src/plugin/runtime/Util_PluginMessage_Runtime.res.mjs +1 -1
- package/src/util/Util_CognitoGroupUser_Runtime.res.mjs +2 -2
- package/src/util/Util_Cognito_Runtime.res.mjs +1 -1
- package/src/util/Util_DynamoDb_Runtime.res.mjs +4 -4
- package/src/util/Util_Kinesis_Runtime.res.mjs +1 -1
- package/src/util/Util_SNS_Runtime.res.mjs +2 -2
- package/src/util/Util_SQS_Runtime.res.mjs +5 -5
- package/tests/AutomationSliceEntryPoint_OpsTest.res +1 -1
- package/tests/AutomationSliceEntryPoint_OpsTest.res.mjs +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,20 @@
|
|
|
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.420 (2026-11-01)
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* **core:** a component's log line carries the ids of the message it is about ([9c26267](https://github.com/ReventlessDev/reventless-core/commit/9c26267ca6d03ff66b8406caa32243e205e29b5a))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
# 3.0.0-alpha.419 (2026-11-01)
|
|
14
|
+
|
|
15
|
+
### Features
|
|
16
|
+
|
|
17
|
+
* **core:** a command's outcome, the flow through automations, and each view change are told ([dcaeed2](https://github.com/ReventlessDev/reventless-core/commit/dcaeed2fabe2047a21797b459f2931618474dec3))
|
|
18
|
+
|
|
19
|
+
|
|
6
20
|
# 3.0.0-alpha.418 (2026-11-01)
|
|
7
21
|
|
|
8
22
|
**Note:** Version bump only for package @reventlessdev/reventless-aws
|
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.420",
|
|
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-effect": "1.0.0-alpha.1",
|
|
25
|
+
"@reventlessdev/rescript-aws-sdk": "3.0.0-alpha.38",
|
|
27
26
|
"@reventlessdev/rescript-jest": "1.0.0-alpha.13",
|
|
28
|
-
"@reventlessdev/rescript-
|
|
29
|
-
"@reventlessdev/rescript-pulumi-aws": "3.0.0-alpha.
|
|
27
|
+
"@reventlessdev/rescript-effect": "1.0.0-alpha.1",
|
|
28
|
+
"@reventlessdev/rescript-pulumi-aws": "3.0.0-alpha.38",
|
|
29
|
+
"@reventlessdev/rescript-node": "2.0.0-alpha.25",
|
|
30
30
|
"@reventlessdev/rescript-pulumi-pulumi": "3.0.0-alpha.0",
|
|
31
31
|
"@reventlessdev/rescript-uuid": "2.0.0-alpha.1",
|
|
32
|
-
"@reventlessdev/reventless-core": "3.0.0-alpha.325",
|
|
33
|
-
"@reventlessdev/reventless-infra": "3.0.0-alpha.220",
|
|
34
|
-
"@reventlessdev/reventless-postgres": "3.0.0-alpha.189",
|
|
35
|
-
"@reventlessdev/reventless-interop": "3.0.0-alpha.42",
|
|
36
32
|
"@reventlessdev/rescript-web": "1.0.0-alpha.8",
|
|
37
|
-
"@reventlessdev/reventless-
|
|
33
|
+
"@reventlessdev/reventless-infra": "3.0.0-alpha.221",
|
|
34
|
+
"@reventlessdev/reventless-postgres": "3.0.0-alpha.191",
|
|
35
|
+
"@reventlessdev/reventless-core": "3.0.0-alpha.327",
|
|
36
|
+
"@reventlessdev/reventless-spec": "3.0.0-alpha.192",
|
|
37
|
+
"@reventlessdev/reventless-interop": "3.0.0-alpha.42"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"rescript": "12.3.1",
|
|
@@ -31,10 +31,10 @@ function handleQueueEvent(queue, handleJsonCommands) {
|
|
|
31
31
|
ReceiptHandle: result._0
|
|
32
32
|
};
|
|
33
33
|
}
|
|
34
|
-
Effect.runSync(EffectLogger$ReventlessCore.logError("CommandTopicChannel_SQS_Runtime-ReventlessAws", undefined, "handleQueueEvent: Couldn't handle command with ReceiptHandle: " + result._0));
|
|
34
|
+
Effect.runSync(EffectLogger$ReventlessCore.logError("CommandTopicChannel_SQS_Runtime-ReventlessAws", undefined, undefined, "handleQueueEvent: Couldn't handle command with ReceiptHandle: " + result._0));
|
|
35
35
|
}), x => x);
|
|
36
36
|
if (deleteEntries.length !== 0) {
|
|
37
|
-
return Effect.catchAll(Effect.tap(Util_SQS_Runtime$ReventlessAws.deleteMessages(deleteEntries, queue), () => EffectLogger$ReventlessCore.logInfo("CommandTopicChannel_SQS_Runtime-ReventlessAws", undefined, "handleQueueEvent: Deleted all commands from queue")), errorMsg => EffectLogger$ReventlessCore.logError("CommandTopicChannel_SQS_Runtime-ReventlessAws", undefined, "handleQueueEvent: Couldn't deleteMessageBatch: " + errorMsg));
|
|
37
|
+
return Effect.catchAll(Effect.tap(Util_SQS_Runtime$ReventlessAws.deleteMessages(deleteEntries, queue), () => EffectLogger$ReventlessCore.logInfo("CommandTopicChannel_SQS_Runtime-ReventlessAws", undefined, undefined, "handleQueueEvent: Deleted all commands from queue")), errorMsg => EffectLogger$ReventlessCore.logError("CommandTopicChannel_SQS_Runtime-ReventlessAws", undefined, undefined, "handleQueueEvent: Couldn't deleteMessageBatch: " + errorMsg));
|
|
38
38
|
} else {
|
|
39
39
|
return Effect.succeed();
|
|
40
40
|
}
|
|
@@ -52,7 +52,7 @@ function publishJsons(queue, queueService) {
|
|
|
52
52
|
return await Effect.runPromise(Util_SQS_Runtime$ReventlessAws.send(queue, queueService, jsons[0]));
|
|
53
53
|
}
|
|
54
54
|
} else {
|
|
55
|
-
Effect.runPromise(EffectLogger$ReventlessCore.logInfo("CommandTopicChannel_SQS_Runtime-ReventlessAws", undefined, "publishJsons: No commands to send"));
|
|
55
|
+
Effect.runPromise(EffectLogger$ReventlessCore.logInfo("CommandTopicChannel_SQS_Runtime-ReventlessAws", undefined, undefined, "publishJsons: No commands to send"));
|
|
56
56
|
return;
|
|
57
57
|
}
|
|
58
58
|
};
|
|
@@ -73,11 +73,11 @@ function handleDynamoDbEvent(handleEvents) {
|
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
function enqueueEvent(queue, delay, _id, messageBody) {
|
|
76
|
-
return Effect.runPromise(Effect.map(Effect.flatMap(EffectLogger$ReventlessCore.logInfo("EventCollectorChannel_SQS_Runtime-ReventlessAws", undefined, "enqueueEvent: " + delay.toString() + " " + messageBody + " " + queue.name), () => Effect.promise(() => Util_SQS_Runtime$ReventlessAws.sendMessage(queue, delay, messageBody))), () => {}));
|
|
76
|
+
return Effect.runPromise(Effect.map(Effect.flatMap(EffectLogger$ReventlessCore.logInfo("EventCollectorChannel_SQS_Runtime-ReventlessAws", undefined, undefined, "enqueueEvent: " + delay.toString() + " " + messageBody + " " + queue.name), () => Effect.promise(() => Util_SQS_Runtime$ReventlessAws.sendMessage(queue, delay, messageBody))), () => {}));
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
function enqueueFifoEvent(queue, delay, id, messageBody) {
|
|
80
|
-
return Effect.runPromise(Effect.map(Effect.flatMap(EffectLogger$ReventlessCore.logInfo("EventCollectorChannel_SQS_Runtime-ReventlessAws", undefined, "enqueueFifoEvent: " + delay.toString() + " " + messageBody + " " + queue.name), () => Effect.promise(() => Util_SQS_Runtime$ReventlessAws.sendFifoMessage(queue, delay, Util_SQS_Runtime$ReventlessAws.safeGroupId(id), messageBody))), () => {}));
|
|
80
|
+
return Effect.runPromise(Effect.map(Effect.flatMap(EffectLogger$ReventlessCore.logInfo("EventCollectorChannel_SQS_Runtime-ReventlessAws", undefined, undefined, "enqueueFifoEvent: " + delay.toString() + " " + messageBody + " " + queue.name), () => Effect.promise(() => Util_SQS_Runtime$ReventlessAws.sendFifoMessage(queue, delay, Util_SQS_Runtime$ReventlessAws.safeGroupId(id), messageBody))), () => {}));
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
export {
|
|
@@ -248,7 +248,7 @@ function replayStream(table) {
|
|
|
248
248
|
}
|
|
249
249
|
|
|
250
250
|
function replay(table) {
|
|
251
|
-
return id => Effect$1.runPromise(Effect$1.catchAll(Stream.runCollect(replayStream(table)(id, undefined)), msg => Effect$1.flatMap(EffectLogger$ReventlessCore.logError("EventLogStorage_DynamoDb_Runtime-ReventlessAws", undefined, `Couldn't replay events for id ` + id + ` after retries: ` + msg), () => Effect$1.fail(msg))));
|
|
251
|
+
return id => Effect$1.runPromise(Effect$1.catchAll(Stream.runCollect(replayStream(table)(id, undefined)), msg => Effect$1.flatMap(EffectLogger$ReventlessCore.logError("EventLogStorage_DynamoDb_Runtime-ReventlessAws", undefined, undefined, `Couldn't replay events for id ` + id + ` after retries: ` + msg), () => Effect$1.fail(msg))));
|
|
252
252
|
}
|
|
253
253
|
|
|
254
254
|
function appendStream(table) {
|
|
@@ -56,7 +56,7 @@ function load(table) {
|
|
|
56
56
|
})), err => {
|
|
57
57
|
let tableName = table.name;
|
|
58
58
|
let msg = QueryDb$ReventlessCore.storageErrorToString(err);
|
|
59
|
-
return Effect$1.map(EffectLogger$ReventlessCore.logError("QueryDbStorage_DynamoDb_Runtime-ReventlessAws", undefined, `load: Couldn't load state for ` + id + ` from ` + tableName + `: ` + msg), () => ({
|
|
59
|
+
return Effect$1.map(EffectLogger$ReventlessCore.logError("QueryDbStorage_DynamoDb_Runtime-ReventlessAws", undefined, undefined, `load: Couldn't load state for ` + id + ` from ` + tableName + `: ` + msg), () => ({
|
|
60
60
|
TAG: "Error",
|
|
61
61
|
_0: err
|
|
62
62
|
}));
|
|
@@ -73,13 +73,13 @@ function save(table) {
|
|
|
73
73
|
case "Init" :
|
|
74
74
|
tmp = Effect$1.flatMap(Util_DynamoDb_Runtime$ReventlessAws.putIfNotExistsWithRetries(table.hashKey, table.rangeKey, table, id, json$1), result => {
|
|
75
75
|
if (result.TAG === "Ok") {
|
|
76
|
-
return Effect$1.map(EffectLogger$ReventlessCore.logInfo("QueryDbStorage_DynamoDb_Runtime-ReventlessAws", undefined, `save: saved Init state to ` + tableName + `: id=` + id), () => ({
|
|
76
|
+
return Effect$1.map(EffectLogger$ReventlessCore.logInfo("QueryDbStorage_DynamoDb_Runtime-ReventlessAws", undefined, undefined, `save: saved Init state to ` + tableName + `: id=` + id), () => ({
|
|
77
77
|
TAG: "Ok",
|
|
78
78
|
_0: undefined
|
|
79
79
|
}));
|
|
80
80
|
}
|
|
81
81
|
let errorMsg = result._0;
|
|
82
|
-
return Effect$1.map(EffectLogger$ReventlessCore.logError("QueryDbStorage_DynamoDb_Runtime-ReventlessAws", undefined, `save: Couldn't save Init state to ` + tableName + `, id=` + id + `: ` + errorMsg), () => ({
|
|
82
|
+
return Effect$1.map(EffectLogger$ReventlessCore.logError("QueryDbStorage_DynamoDb_Runtime-ReventlessAws", undefined, undefined, `save: Couldn't save Init state to ` + tableName + `, id=` + id + `: ` + errorMsg), () => ({
|
|
83
83
|
TAG: "Error",
|
|
84
84
|
_0: {
|
|
85
85
|
TAG: "NotSavedToStorage",
|
|
@@ -96,13 +96,13 @@ function save(table) {
|
|
|
96
96
|
if (exit === 1) {
|
|
97
97
|
tmp = Effect$1.flatMap(Util_DynamoDb_Runtime$ReventlessAws.putWithRetries(table, id, json$1), result => {
|
|
98
98
|
if (result.TAG === "Ok") {
|
|
99
|
-
return Effect$1.map(EffectLogger$ReventlessCore.logInfo("QueryDbStorage_DynamoDb_Runtime-ReventlessAws", undefined, `save: saved state to ` + tableName + `: id=` + id), () => ({
|
|
99
|
+
return Effect$1.map(EffectLogger$ReventlessCore.logInfo("QueryDbStorage_DynamoDb_Runtime-ReventlessAws", undefined, undefined, `save: saved state to ` + tableName + `: id=` + id), () => ({
|
|
100
100
|
TAG: "Ok",
|
|
101
101
|
_0: undefined
|
|
102
102
|
}));
|
|
103
103
|
}
|
|
104
104
|
let errorMsg = result._0;
|
|
105
|
-
return Effect$1.map(EffectLogger$ReventlessCore.logError("QueryDbStorage_DynamoDb_Runtime-ReventlessAws", undefined, `save: Couldn't save state to ` + tableName + `, id=` + id + `: ` + errorMsg), () => ({
|
|
105
|
+
return Effect$1.map(EffectLogger$ReventlessCore.logError("QueryDbStorage_DynamoDb_Runtime-ReventlessAws", undefined, undefined, `save: Couldn't save state to ` + tableName + `, id=` + id + `: ` + errorMsg), () => ({
|
|
106
106
|
TAG: "Error",
|
|
107
107
|
_0: {
|
|
108
108
|
TAG: "NotSavedToStorage",
|
|
@@ -127,7 +127,7 @@ function writeMultiple(writeRequests, op, ids, table) {
|
|
|
127
127
|
let allIdsStr = ids.join(", ");
|
|
128
128
|
let size = writeRequests.length;
|
|
129
129
|
let batches = Stdlib_Math.Int.ceil(size / DynamoDb_DocumentClient$AwsSdk.BatchWriteCommand.maxBatchSize);
|
|
130
|
-
let logSplitEffect = batches > 1 ? EffectLogger$ReventlessCore.logInfo("QueryDbStorage_DynamoDb_Runtime-ReventlessAws", undefined, `writeBatch: splitting up batch of size ` + size.toString() + ` into ` + batches.toString() + ` batches`) : Effect$1.succeed();
|
|
130
|
+
let logSplitEffect = batches > 1 ? EffectLogger$ReventlessCore.logInfo("QueryDbStorage_DynamoDb_Runtime-ReventlessAws", undefined, undefined, `writeBatch: splitting up batch of size ` + size.toString() + ` into ` + batches.toString() + ` batches`) : Effect$1.succeed();
|
|
131
131
|
let batchEffects = Stdlib_Array.fromInitializer(batches, batchNr => Effect$1.map(Util_DynamoDb_Runtime$ReventlessAws.batchWriteWithRetries(Util_DynamoDb_Runtime$ReventlessAws.toTable(sliceBatch(writeRequests, batchNr), tableName)), result => {
|
|
132
132
|
let batchIds = sliceBatch(ids, batchNr);
|
|
133
133
|
let batchCount = batchIds.length.toString();
|
|
@@ -142,14 +142,14 @@ function writeMultiple(writeRequests, op, ids, table) {
|
|
|
142
142
|
concurrency: "unbounded"
|
|
143
143
|
})), results => Stdlib_Array.filterMap(results, x => x)), errors => {
|
|
144
144
|
if (errors.length === 0) {
|
|
145
|
-
return Effect$1.map(EffectLogger$ReventlessCore.logInfo("QueryDbStorage_DynamoDb_Runtime-ReventlessAws", undefined, `writeBatch: ` + op + ` ` + count + ` states: ` + tableName + `, ids:` + allIdsStr), () => ({
|
|
145
|
+
return Effect$1.map(EffectLogger$ReventlessCore.logInfo("QueryDbStorage_DynamoDb_Runtime-ReventlessAws", undefined, undefined, `writeBatch: ` + op + ` ` + count + ` states: ` + tableName + `, ids:` + allIdsStr), () => ({
|
|
146
146
|
TAG: "Ok",
|
|
147
147
|
_0: undefined
|
|
148
148
|
}));
|
|
149
149
|
}
|
|
150
150
|
let errorsStr = errors.join("; ");
|
|
151
151
|
let errorMsg = `writeBatch: Couldn't save states to ` + tableName + `: ` + errorsStr;
|
|
152
|
-
return Effect$1.map(EffectLogger$ReventlessCore.logError("QueryDbStorage_DynamoDb_Runtime-ReventlessAws", undefined, errorMsg), () => ({
|
|
152
|
+
return Effect$1.map(EffectLogger$ReventlessCore.logError("QueryDbStorage_DynamoDb_Runtime-ReventlessAws", undefined, undefined, errorMsg), () => ({
|
|
153
153
|
TAG: "Error",
|
|
154
154
|
_0: {
|
|
155
155
|
TAG: "BatchNotFullyWrittenToStorage",
|
|
@@ -159,7 +159,7 @@ function writeMultiple(writeRequests, op, ids, table) {
|
|
|
159
159
|
}), err => {
|
|
160
160
|
let msg = DynamoDb_Error$ReventlessAws.message(err);
|
|
161
161
|
let errorMsg = `writeBatch: Couldn't save states to ` + tableName + `, ` + count + ` ids:` + allIdsStr + `: ` + msg;
|
|
162
|
-
return Effect$1.map(EffectLogger$ReventlessCore.logError("QueryDbStorage_DynamoDb_Runtime-ReventlessAws", undefined, errorMsg), () => ({
|
|
162
|
+
return Effect$1.map(EffectLogger$ReventlessCore.logError("QueryDbStorage_DynamoDb_Runtime-ReventlessAws", undefined, undefined, errorMsg), () => ({
|
|
163
163
|
TAG: "Error",
|
|
164
164
|
_0: {
|
|
165
165
|
TAG: "BatchNotFullyWrittenToStorage",
|
|
@@ -190,7 +190,7 @@ function saveBatch(table) {
|
|
|
190
190
|
function count(table) {
|
|
191
191
|
return (id, fieldName, inc) => {
|
|
192
192
|
let tableName = table.name;
|
|
193
|
-
return Effect$1.runPromise(Effect$1.catchAll(Effect$1.flatMap(Effect$1.flatMap(EffectLogger$ReventlessCore.logInfo("QueryDbStorage_DynamoDb_Runtime-ReventlessAws", undefined, `count: ` + tableName + `, ` + id + `, ` + fieldName + `, ` + inc.toString()), () => Effect.tryPromise(err => Util_Error$ReventlessCore.messageFromUnknown(err, "count"), () => DynamoDb_DocumentClient$AwsSdk.UpdateCommand.send(new LibDynamodb.UpdateCommand({
|
|
193
|
+
return Effect$1.runPromise(Effect$1.catchAll(Effect$1.flatMap(Effect$1.flatMap(EffectLogger$ReventlessCore.logInfo("QueryDbStorage_DynamoDb_Runtime-ReventlessAws", undefined, undefined, `count: ` + tableName + `, ` + id + `, ` + fieldName + `, ` + inc.toString()), () => Effect.tryPromise(err => Util_Error$ReventlessCore.messageFromUnknown(err, "count"), () => DynamoDb_DocumentClient$AwsSdk.UpdateCommand.send(new LibDynamodb.UpdateCommand({
|
|
194
194
|
Key: Object.fromEntries([[
|
|
195
195
|
"id",
|
|
196
196
|
id
|
|
@@ -214,7 +214,7 @@ function count(table) {
|
|
|
214
214
|
_0: value
|
|
215
215
|
});
|
|
216
216
|
} else {
|
|
217
|
-
return Effect$1.map(EffectLogger$ReventlessCore.logError("QueryDbStorage_DynamoDb_Runtime-ReventlessAws", undefined, `count: Invalid updateOutput in count on ` + tableName), () => ({
|
|
217
|
+
return Effect$1.map(EffectLogger$ReventlessCore.logError("QueryDbStorage_DynamoDb_Runtime-ReventlessAws", undefined, undefined, `count: Invalid updateOutput in count on ` + tableName), () => ({
|
|
218
218
|
TAG: "Error",
|
|
219
219
|
_0: {
|
|
220
220
|
TAG: "NotCountedOnStorage",
|
|
@@ -222,7 +222,7 @@ function count(table) {
|
|
|
222
222
|
}
|
|
223
223
|
}));
|
|
224
224
|
}
|
|
225
|
-
}), errorMsg => Effect$1.map(EffectLogger$ReventlessCore.logError("QueryDbStorage_DynamoDb_Runtime-ReventlessAws", undefined, `count: Couldn't count on ` + tableName + `: ` + errorMsg), () => ({
|
|
225
|
+
}), errorMsg => Effect$1.map(EffectLogger$ReventlessCore.logError("QueryDbStorage_DynamoDb_Runtime-ReventlessAws", undefined, undefined, `count: Couldn't count on ` + tableName + `: ` + errorMsg), () => ({
|
|
226
226
|
TAG: "Error",
|
|
227
227
|
_0: {
|
|
228
228
|
TAG: "NotCountedOnStorage",
|
|
@@ -237,13 +237,13 @@ function $$delete(table) {
|
|
|
237
237
|
let tableName = table.name;
|
|
238
238
|
return Effect$1.runPromise(Effect$1.flatMap(Util_DynamoDb_Runtime$ReventlessAws.deleteWithRetries(sort, table, id), result => {
|
|
239
239
|
if (result.TAG === "Ok") {
|
|
240
|
-
return Effect$1.map(EffectLogger$ReventlessCore.logInfo("QueryDbStorage_DynamoDb_Runtime-ReventlessAws", undefined, `delete: deleted state from ` + tableName + `: id=` + id + `, sort=` + Stdlib_Option.getOr(JSON.stringify(sort), "None")), () => ({
|
|
240
|
+
return Effect$1.map(EffectLogger$ReventlessCore.logInfo("QueryDbStorage_DynamoDb_Runtime-ReventlessAws", undefined, undefined, `delete: deleted state from ` + tableName + `: id=` + id + `, sort=` + Stdlib_Option.getOr(JSON.stringify(sort), "None")), () => ({
|
|
241
241
|
TAG: "Ok",
|
|
242
242
|
_0: undefined
|
|
243
243
|
}));
|
|
244
244
|
}
|
|
245
245
|
let errorMsg = result._0;
|
|
246
|
-
return Effect$1.map(EffectLogger$ReventlessCore.logError("QueryDbStorage_DynamoDb_Runtime-ReventlessAws", undefined, `delete: Couldn't delete state from ` + tableName + `, id=` + id + `, sort=` + Stdlib_Option.getOr(JSON.stringify(sort), "None") + `: ` + errorMsg), () => ({
|
|
246
|
+
return Effect$1.map(EffectLogger$ReventlessCore.logError("QueryDbStorage_DynamoDb_Runtime-ReventlessAws", undefined, undefined, `delete: Couldn't delete state from ` + tableName + `, id=` + id + `, sort=` + Stdlib_Option.getOr(JSON.stringify(sort), "None") + `: ` + errorMsg), () => ({
|
|
247
247
|
TAG: "Error",
|
|
248
248
|
_0: {
|
|
249
249
|
TAG: "NotDeletedFromStorage",
|
|
@@ -167,9 +167,9 @@ function queryByTableName(tableName, keyOpt, id, subIdConfig, filterConfigsOpt,
|
|
|
167
167
|
Limit: params_Limit,
|
|
168
168
|
ScanIndexForward: params_ScanIndexForward
|
|
169
169
|
};
|
|
170
|
-
return Effect.runPromise(Effect.flatMap(EffectLogger$ReventlessCore.logDebug("QueryEngine_DynamoDb-ReventlessAws", undefined, "queryByTableName params: " + LogFormat$ReventlessCore.truncate(Stdlib_Option.getOr(JSON.stringify(params), ""))), () => Effect.catchAll(Effect.map(Stream.runCollect(Util_DynamoDb_Runtime$ReventlessAws.queryStream(params)), items => items.map(js => JSON.parse(JSON.stringify(js)))), err => {
|
|
170
|
+
return Effect.runPromise(Effect.flatMap(EffectLogger$ReventlessCore.logDebug("QueryEngine_DynamoDb-ReventlessAws", undefined, undefined, "queryByTableName params: " + LogFormat$ReventlessCore.truncate(Stdlib_Option.getOr(JSON.stringify(params), ""))), () => Effect.catchAll(Effect.map(Stream.runCollect(Util_DynamoDb_Runtime$ReventlessAws.queryStream(params)), items => items.map(js => JSON.parse(JSON.stringify(js)))), err => {
|
|
171
171
|
let msg = DynamoDb_Error$ReventlessAws.message(err);
|
|
172
|
-
return Effect.map(EffectLogger$ReventlessCore.logError("QueryEngine_DynamoDb-ReventlessAws", undefined, "queryByTableName: " + msg), () => []);
|
|
172
|
+
return Effect.map(EffectLogger$ReventlessCore.logError("QueryEngine_DynamoDb-ReventlessAws", undefined, undefined, "queryByTableName: " + msg), () => []);
|
|
173
173
|
})));
|
|
174
174
|
}
|
|
175
175
|
|
|
@@ -197,9 +197,9 @@ function scanByTableName(tableName, filterConfigs, limit) {
|
|
|
197
197
|
FilterExpression: params_FilterExpression,
|
|
198
198
|
Limit: params_Limit
|
|
199
199
|
};
|
|
200
|
-
return Effect.runPromise(Effect.flatMap(EffectLogger$ReventlessCore.logDebug("QueryEngine_DynamoDb-ReventlessAws", undefined, "scanByTableName params: " + LogFormat$ReventlessCore.truncate(Stdlib_Option.getOr(JSON.stringify(params), ""))), () => Effect.catchAll(Effect.map(Stream.runCollect(Util_DynamoDb_Runtime$ReventlessAws.scanStream(params)), items => items.map(js => JSON.parse(JSON.stringify(js)))), err => {
|
|
200
|
+
return Effect.runPromise(Effect.flatMap(EffectLogger$ReventlessCore.logDebug("QueryEngine_DynamoDb-ReventlessAws", undefined, undefined, "scanByTableName params: " + LogFormat$ReventlessCore.truncate(Stdlib_Option.getOr(JSON.stringify(params), ""))), () => Effect.catchAll(Effect.map(Stream.runCollect(Util_DynamoDb_Runtime$ReventlessAws.scanStream(params)), items => items.map(js => JSON.parse(JSON.stringify(js)))), err => {
|
|
201
201
|
let msg = DynamoDb_Error$ReventlessAws.message(err);
|
|
202
|
-
return Effect.map(EffectLogger$ReventlessCore.logError("QueryEngine_DynamoDb-ReventlessAws", undefined, "scanByTableName: " + msg), () => []);
|
|
202
|
+
return Effect.map(EffectLogger$ReventlessCore.logError("QueryEngine_DynamoDb-ReventlessAws", undefined, undefined, "scanByTableName: " + msg), () => []);
|
|
203
203
|
})));
|
|
204
204
|
}
|
|
205
205
|
|
|
@@ -539,7 +539,7 @@ let makeOutboundJsonEventsHandler = (
|
|
|
539
539
|
->Option.getOr("")
|
|
540
540
|
let (eventType, dataDict) = rawEvent->ReventlessCore.Message.splitMessage
|
|
541
541
|
switch decoder.decode(~eventType, ~data=dataDict) {
|
|
542
|
-
| Some(event) => [(sourceId, event)]
|
|
542
|
+
| Some(event) => [(sourceId, event, ReventlessCore.Message.metaOfEnvelope(envelope))]
|
|
543
543
|
| None => []
|
|
544
544
|
}
|
|
545
545
|
})
|
|
@@ -549,7 +549,11 @@ let makeOutboundJsonEventsHandler = (
|
|
|
549
549
|
->Effect.flatMap(events =>
|
|
550
550
|
Effect.promise(async () => {
|
|
551
551
|
await loadTodoItems()
|
|
552
|
-
await callback.phase1(
|
|
552
|
+
await callback.phase1(
|
|
553
|
+
events->Array.map(((sourceId, event, _)) => (sourceId, event)),
|
|
554
|
+
~metas=events->Array.map(((_, _, meta)) => meta),
|
|
555
|
+
~capabilities=capabilities(),
|
|
556
|
+
)
|
|
553
557
|
await syncTodoItems()
|
|
554
558
|
await callback.phase2(publishJsons, ~capabilities=capabilities())
|
|
555
559
|
await syncTodoItems()
|
|
@@ -187,9 +187,9 @@ function makeLoadTodoItems(queryDbTableName, todoItems, rowSchema, comp) {
|
|
|
187
187
|
}
|
|
188
188
|
todoItems[id] = row;
|
|
189
189
|
return count + 1 | 0;
|
|
190
|
-
})), err => Effect.map(EffectLogger$ReventlessCore.logError(comp, undefined, `restore: couldn't read pending TODO rows from ` + queryDbTableName + `: ` + DynamoDb_Error$ReventlessAws.message(err)), () => 0)));
|
|
190
|
+
})), err => Effect.map(EffectLogger$ReventlessCore.logError(comp, undefined, undefined, `restore: couldn't read pending TODO rows from ` + queryDbTableName + `: ` + DynamoDb_Error$ReventlessAws.message(err)), () => 0)));
|
|
191
191
|
if (restored > 0) {
|
|
192
|
-
return Effect.runSync(EffectLogger$ReventlessCore.logInfo(comp, undefined, `restore: reloaded ` + restored.toString() + ` unfinished TODO row(s) from ` + queryDbTableName));
|
|
192
|
+
return Effect.runSync(EffectLogger$ReventlessCore.logInfo(comp, undefined, undefined, `restore: reloaded ` + restored.toString() + ` unfinished TODO row(s) from ` + queryDbTableName));
|
|
193
193
|
}
|
|
194
194
|
};
|
|
195
195
|
}
|
|
@@ -237,7 +237,7 @@ function makeScheduleStore(tableName, rows, comp) {
|
|
|
237
237
|
return;
|
|
238
238
|
}
|
|
239
239
|
});
|
|
240
|
-
}), err => EffectLogger$ReventlessCore.logError(comp, undefined, `restore: couldn't read the schedules from ` + tableName + `: ` + DynamoDb_Error$ReventlessAws.message(err))));
|
|
240
|
+
}), err => EffectLogger$ReventlessCore.logError(comp, undefined, undefined, `restore: couldn't read the schedules from ` + tableName + `: ` + DynamoDb_Error$ReventlessAws.message(err))));
|
|
241
241
|
stored.contents = Object.keys(rows);
|
|
242
242
|
};
|
|
243
243
|
let sync = async () => {
|
|
@@ -323,14 +323,18 @@ function makeOutboundJsonEventsHandler(consumedEventSchema, callback, publishJso
|
|
|
323
323
|
if (event !== undefined) {
|
|
324
324
|
return [[
|
|
325
325
|
sourceId,
|
|
326
|
-
Primitive_option.valFromOption(event)
|
|
326
|
+
Primitive_option.valFromOption(event),
|
|
327
|
+
Message$ReventlessCore.metaOfEnvelope(envelope)
|
|
327
328
|
]];
|
|
328
329
|
} else {
|
|
329
330
|
return [];
|
|
330
331
|
}
|
|
331
332
|
})), events => Stream$1.fromIterable(events))), events => Effect.promise(async () => {
|
|
332
333
|
await loadTodoItems();
|
|
333
|
-
await callback.phase1(events
|
|
334
|
+
await callback.phase1(events.map(param => [
|
|
335
|
+
param[0],
|
|
336
|
+
param[1]
|
|
337
|
+
]), events.map(param => param[2]), capabilities());
|
|
334
338
|
await syncTodoItems();
|
|
335
339
|
await callback.phase2(publishJsons, capabilities());
|
|
336
340
|
return await syncTodoItems();
|
|
@@ -436,7 +440,7 @@ async function runSweeps(slices) {
|
|
|
436
440
|
} catch (raw_exn) {
|
|
437
441
|
let exn = Primitive_exceptions.internalToException(raw_exn);
|
|
438
442
|
let msg = Stdlib_Option.getOr(Stdlib_Option.flatMap(Stdlib_JsExn.fromException(exn), Stdlib_JsExn.message), "unknown");
|
|
439
|
-
Effect.runSync(EffectLogger$ReventlessCore.logError(slice.comp, undefined, `sweep failed: ` + msg));
|
|
443
|
+
Effect.runSync(EffectLogger$ReventlessCore.logError(slice.comp, undefined, undefined, `sweep failed: ` + msg));
|
|
440
444
|
}
|
|
441
445
|
}
|
|
442
446
|
}
|
|
@@ -461,7 +465,7 @@ async function reconcileSchedules(slices) {
|
|
|
461
465
|
for (let i = 0, i_finish = reconciles.length; i < i_finish; ++i) {
|
|
462
466
|
await reconciles[i]();
|
|
463
467
|
}
|
|
464
|
-
return Effect.runSync(EffectLogger$ReventlessCore.logInfo("AutomationSliceRuntime", undefined, `reconcile: the schedules of ` + reconciles.length.toString() + ` automation(s) are in line`));
|
|
468
|
+
return Effect.runSync(EffectLogger$ReventlessCore.logInfo("AutomationSliceRuntime", undefined, undefined, `reconcile: the schedules of ` + reconciles.length.toString() + ` automation(s) are in line`));
|
|
465
469
|
}
|
|
466
470
|
|
|
467
471
|
export {
|
|
@@ -45,7 +45,7 @@ function deriveScope(specs) {
|
|
|
45
45
|
let err = Primitive_exceptions.internalToException(raw_err);
|
|
46
46
|
if (err.RE_EXN_ID === "JsExn") {
|
|
47
47
|
let err$1 = err._1;
|
|
48
|
-
Effect.runSync(EffectLogger$ReventlessCore.logError("DcbCommandTopicRuntime", undefined, `refusing to start: ` + Stdlib_Option.getOr(Stdlib_JsExn.message(err$1), "unknown error")));
|
|
48
|
+
Effect.runSync(EffectLogger$ReventlessCore.logError("DcbCommandTopicRuntime", undefined, undefined, `refusing to start: ` + Stdlib_Option.getOr(Stdlib_JsExn.message(err$1), "unknown error")));
|
|
49
49
|
throw err$1;
|
|
50
50
|
}
|
|
51
51
|
throw err;
|
|
@@ -135,12 +135,12 @@ async function persistAudit(callback, auditQueryDbOps, result) {
|
|
|
135
135
|
if (err.TAG === "Ok") {
|
|
136
136
|
return;
|
|
137
137
|
} else {
|
|
138
|
-
return Effect.runSync(EffectLogger$ReventlessCore.logError("InboundTranslationSlice.audit", undefined, `failed to persist audit row ` + id + `: ` + QueryDb$ReventlessCore.storageErrorToString(err._0)));
|
|
138
|
+
return Effect.runSync(EffectLogger$ReventlessCore.logError("InboundTranslationSlice.audit", undefined, undefined, `failed to persist audit row ` + id + `: ` + QueryDb$ReventlessCore.storageErrorToString(err._0)));
|
|
139
139
|
}
|
|
140
140
|
} catch (raw_exn) {
|
|
141
141
|
let exn = Primitive_exceptions.internalToException(raw_exn);
|
|
142
142
|
let detail = Stdlib_Option.getOr(Stdlib_Option.flatMap(Stdlib_JsExn.fromException(exn), Stdlib_JsExn.message), "unknown error");
|
|
143
|
-
return Effect.runSync(EffectLogger$ReventlessCore.logError("InboundTranslationSlice.audit", undefined, `failed to persist audit row ` + id + `: ` + detail));
|
|
143
|
+
return Effect.runSync(EffectLogger$ReventlessCore.logError("InboundTranslationSlice.audit", undefined, undefined, `failed to persist audit row ` + id + `: ` + detail));
|
|
144
144
|
}
|
|
145
145
|
}
|
|
146
146
|
|
|
@@ -126,6 +126,20 @@ let decodeEnvelope = (json: JSON.t): envelope<'event> => {
|
|
|
126
126
|
|
|
127
127
|
let exnMessage = StreamRoutedEntryPoint_Ops.exnMessage
|
|
128
128
|
|
|
129
|
+
// The event an envelope carries, as the source of the rows its actions change.
|
|
130
|
+
// Read off the JSON, like `producerTime`: an envelope without a meta yields none.
|
|
131
|
+
let sourcesOf = (json: JSON.t): array<ReventlessCore.Projection.changeSource> => {
|
|
132
|
+
let fields = json->JSON.Decode.object->Option.getOr(Dict.make())
|
|
133
|
+
let meta = fields->Dict.get("meta")->Option.flatMap(JSON.Decode.object)
|
|
134
|
+
let string = (d, k) => d->Option.flatMap(d => d->Dict.get(k))->Option.flatMap(JSON.Decode.string)
|
|
135
|
+
switch string(meta, "msgId") {
|
|
136
|
+
| Some(msgId) =>
|
|
137
|
+
let (entityId, entityType) = ReventlessCore.ViewChange.entityOfEnvelope(fields)
|
|
138
|
+
[{msgId, correlationId: ?string(meta, "correlationId"), ?entityId, ?entityType}]
|
|
139
|
+
| None => []
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
129
143
|
// The typed core of buildJsonEventsHandler: decode each envelope, parse the
|
|
130
144
|
// event against the slice's consumed-event schema, project, and run every
|
|
131
145
|
// resulting action against the view table. A decode failure logs and yields no
|
|
@@ -140,7 +154,13 @@ let makeJsonEventsHandler = (
|
|
|
140
154
|
~queryDbOps: ReventlessCore.QueryDb_Adapter.operations,
|
|
141
155
|
~subIdConfig: option<Reventless.ReadModel.subIdConfig<JSON.t>>,
|
|
142
156
|
~stateSchema: option<S.t<unknown>>,
|
|
143
|
-
): ReventlessCore.EventCollector.jsonEventsHandler =>
|
|
157
|
+
): ReventlessCore.EventCollector.jsonEventsHandler => {
|
|
158
|
+
// Each row the events change is logged; the states are already JSON.
|
|
159
|
+
let onChange = ReventlessCore.ViewChange.reporter(
|
|
160
|
+
~comp=sliceName,
|
|
161
|
+
~view=sliceName,
|
|
162
|
+
~stateToJson=state => state,
|
|
163
|
+
)
|
|
144
164
|
stream =>
|
|
145
165
|
stream
|
|
146
166
|
->Stream.mapEffect(json =>
|
|
@@ -155,11 +175,14 @@ let makeJsonEventsHandler = (
|
|
|
155
175
|
// The deployed slice assembles JSON-level operations rather than going
|
|
156
176
|
// through the typed rewrite, so the trail is appended here — with this
|
|
157
177
|
// envelope's own time, which the apply below no longer has.
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
178
|
+
let sources = sourcesOf(json)
|
|
179
|
+
let actions =
|
|
180
|
+
producerTime === ""
|
|
181
|
+
? actions
|
|
182
|
+
: actions->Array.map(
|
|
183
|
+
ReventlessCore.Projection.rewriteJsonAction(_, ~at=producerTime, ~stateSchema),
|
|
184
|
+
)
|
|
185
|
+
actions->Array.map(action => (action, sources))
|
|
163
186
|
} catch {
|
|
164
187
|
| exn =>
|
|
165
188
|
StreamRoutedEntryPoint_Ops.logError(
|
|
@@ -171,7 +194,7 @@ let makeJsonEventsHandler = (
|
|
|
171
194
|
)
|
|
172
195
|
)
|
|
173
196
|
->Stream.flatMap(actions => Stream.fromIterable(actions))
|
|
174
|
-
->Stream.runForEach(action =>
|
|
197
|
+
->Stream.runForEach(((action, sources)) =>
|
|
175
198
|
// Thread the slice's `subIdConfig` (generated from `@subId`) so
|
|
176
199
|
// sub-id-dependent actions like `UpdateMultiState` can resolve the sort
|
|
177
200
|
// key. Dropping it here made every such action hit the
|
|
@@ -181,9 +204,17 @@ let makeJsonEventsHandler = (
|
|
|
181
204
|
// actions. `~comp` is the slice's spec name — attribution for
|
|
182
205
|
// Projection.handleAction's debug-lazy action log.
|
|
183
206
|
Effect.promise(() =>
|
|
184
|
-
ReventlessCore.Projection.handleAction(
|
|
207
|
+
ReventlessCore.Projection.handleAction(
|
|
208
|
+
~comp=sliceName,
|
|
209
|
+
~sources,
|
|
210
|
+
~onChange,
|
|
211
|
+
action,
|
|
212
|
+
queryDbOps,
|
|
213
|
+
subIdConfig,
|
|
214
|
+
)
|
|
185
215
|
)->Effect.map(_ => ())
|
|
186
216
|
)
|
|
217
|
+
}
|
|
187
218
|
|
|
188
219
|
// ── Handler assembly (called by the shell per HANDLER_CONFIG entry) ─────────
|
|
189
220
|
// `sliceModules` types the shell's reads off the two dynamically imported
|
|
@@ -8,6 +8,7 @@ import * as Stream from "effect/Stream";
|
|
|
8
8
|
import * as Primitive_exceptions from "@rescript/runtime/lib/es6/Primitive_exceptions.js";
|
|
9
9
|
import * as Util_Sury$Reventless from "@reventlessdev/reventless-spec/src/util/Util_Sury.res.mjs";
|
|
10
10
|
import * as Projection$ReventlessCore from "@reventlessdev/reventless-core/src/Projection.res.mjs";
|
|
11
|
+
import * as ViewChange$ReventlessCore from "@reventlessdev/reventless-core/src/ViewChange.res.mjs";
|
|
11
12
|
import * as ProjectionEntryPoint_Ops$ReventlessAws from "./ProjectionEntryPoint_Ops.res.mjs";
|
|
12
13
|
import * as StreamRoutedEntryPoint_Ops$ReventlessAws from "./StreamRoutedEntryPoint_Ops.res.mjs";
|
|
13
14
|
|
|
@@ -64,7 +65,25 @@ function decodeEnvelope(json) {
|
|
|
64
65
|
};
|
|
65
66
|
}
|
|
66
67
|
|
|
68
|
+
function sourcesOf(json) {
|
|
69
|
+
let fields = Stdlib_Option.getOr(Stdlib_JSON.Decode.object(json), {});
|
|
70
|
+
let meta = Stdlib_Option.flatMap(fields["meta"], Stdlib_JSON.Decode.object);
|
|
71
|
+
let string = (d, k) => Stdlib_Option.flatMap(Stdlib_Option.flatMap(d, d => d[k]), Stdlib_JSON.Decode.string);
|
|
72
|
+
let msgId = string(meta, "msgId");
|
|
73
|
+
if (msgId === undefined) {
|
|
74
|
+
return [];
|
|
75
|
+
}
|
|
76
|
+
let match = ViewChange$ReventlessCore.entityOfEnvelope(fields);
|
|
77
|
+
return [{
|
|
78
|
+
msgId: msgId,
|
|
79
|
+
correlationId: string(meta, "correlationId"),
|
|
80
|
+
entityId: match[0],
|
|
81
|
+
entityType: match[1]
|
|
82
|
+
}];
|
|
83
|
+
}
|
|
84
|
+
|
|
67
85
|
function makeJsonEventsHandler(sliceName, eventSchema, project, queryDbOps, subIdConfig, stateSchema) {
|
|
86
|
+
let onChange = ViewChange$ReventlessCore.reporter(sliceName, sliceName, state => state);
|
|
68
87
|
return stream => Stream.runForEach(Stream.flatMap(Stream.mapEffect(stream, json => Effect.sync(() => {
|
|
69
88
|
try {
|
|
70
89
|
let match = decodeEnvelope(json);
|
|
@@ -74,11 +93,12 @@ function makeJsonEventsHandler(sliceName, eventSchema, project, queryDbOps, subI
|
|
|
74
93
|
meta: match.meta,
|
|
75
94
|
recordedAt: match.recordedAt
|
|
76
95
|
});
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
96
|
+
let sources = sourcesOf(json);
|
|
97
|
+
let actions$1 = producerTime === "" ? actions : actions.map(__x => Projection$ReventlessCore.rewriteJsonAction(__x, producerTime, stateSchema));
|
|
98
|
+
return actions$1.map(action => [
|
|
99
|
+
action,
|
|
100
|
+
sources
|
|
101
|
+
]);
|
|
82
102
|
} catch (raw_exn) {
|
|
83
103
|
let exn = Primitive_exceptions.internalToException(raw_exn);
|
|
84
104
|
StreamRoutedEntryPoint_Ops$ReventlessAws.logError("failed to decode event", {
|
|
@@ -87,7 +107,11 @@ function makeJsonEventsHandler(sliceName, eventSchema, project, queryDbOps, subI
|
|
|
87
107
|
});
|
|
88
108
|
return [];
|
|
89
109
|
}
|
|
90
|
-
})), actions => Stream.fromIterable(actions)),
|
|
110
|
+
})), actions => Stream.fromIterable(actions)), param => {
|
|
111
|
+
let sources = param[1];
|
|
112
|
+
let action = param[0];
|
|
113
|
+
return Effect.map(Effect.promise(() => Projection$ReventlessCore.handleAction(sliceName, sources, onChange, action, queryDbOps, subIdConfig)), param => {});
|
|
114
|
+
});
|
|
91
115
|
}
|
|
92
116
|
|
|
93
117
|
function makeRegisteredHandler(entry, modules) {
|
|
@@ -106,6 +130,7 @@ export {
|
|
|
106
130
|
parseHandlerConfig,
|
|
107
131
|
decodeEnvelope,
|
|
108
132
|
exnMessage,
|
|
133
|
+
sourcesOf,
|
|
109
134
|
makeJsonEventsHandler,
|
|
110
135
|
makeRegisteredHandler,
|
|
111
136
|
}
|
package/src/adapter/ScheduledPublisher/ScheduledPublisher_EventBridgeScheduler_Runtime.res.mjs
CHANGED
|
@@ -60,7 +60,7 @@ function scheduleInput(roleArn, targetArn, setAt, schedule) {
|
|
|
60
60
|
|
|
61
61
|
function failWithoutQueue(action) {
|
|
62
62
|
let err = action + ` not possible: no Queue configured !`;
|
|
63
|
-
return Effect.runPromise(Effect.flatMap(EffectLogger$ReventlessCore.logError("ScheduledPublisher_EventBridgeScheduler_Runtime-ReventlessAws", undefined, err), () => Effect.sync(() => Stdlib_JsError.throwWithMessage(err))));
|
|
63
|
+
return Effect.runPromise(Effect.flatMap(EffectLogger$ReventlessCore.logError("ScheduledPublisher_EventBridgeScheduler_Runtime-ReventlessAws", undefined, undefined, err), () => Effect.sync(() => Stdlib_JsError.throwWithMessage(err))));
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
async function putSchedule(roleArn, targetArn, schedule) {
|
|
@@ -9,7 +9,7 @@ import * as EffectLogger$ReventlessCore from "@reventlessdev/reventless-core/src
|
|
|
9
9
|
function sendMessage(channelId, messageBody) {
|
|
10
10
|
return Effect$1.runPromise(Effect$1.catchAll(Effect$1.retry(Effect$1.map(Effect.tryPromise(SQS_Error$ReventlessAws.classify, () => SQS_Helpers$AwsSdk.sendMessage(channelId, messageBody, undefined, undefined, undefined)), () => {}), SQS_Error$ReventlessAws.retrySchedule), err => {
|
|
11
11
|
let msg = SQS_Error$ReventlessAws.message(err);
|
|
12
|
-
return Effect$1.flatMap(EffectLogger$ReventlessCore.logError("Util_PluginMessage_Runtime-ReventlessAws", undefined, "Failed to send message to channel: " + msg), () => Effect$1.fail(err));
|
|
12
|
+
return Effect$1.flatMap(EffectLogger$ReventlessCore.logError("Util_PluginMessage_Runtime-ReventlessAws", undefined, undefined, "Failed to send message to channel: " + msg), () => Effect$1.fail(err));
|
|
13
13
|
}));
|
|
14
14
|
}
|
|
15
15
|
|
|
@@ -21,7 +21,7 @@ function addUserToGroup(region, userName, groupName, userPoolId) {
|
|
|
21
21
|
return client.send(addUserToGroupCommand);
|
|
22
22
|
}), () => {}), Cognito_Error$ReventlessAws.retrySchedule), err => {
|
|
23
23
|
let msg = Cognito_Error$ReventlessAws.message(err);
|
|
24
|
-
return Effect$1.flatMap(EffectLogger$ReventlessCore.logError("Util_CognitoGroupUser_Runtime-ReventlessAws", undefined, `addUserToGroup: ` + msg), () => Effect$1.fail(msg));
|
|
24
|
+
return Effect$1.flatMap(EffectLogger$ReventlessCore.logError("Util_CognitoGroupUser_Runtime-ReventlessAws", undefined, undefined, `addUserToGroup: ` + msg), () => Effect$1.fail(msg));
|
|
25
25
|
}));
|
|
26
26
|
}
|
|
27
27
|
|
|
@@ -39,7 +39,7 @@ function removeUserFromGroup(region, userName, groupName, userPoolId) {
|
|
|
39
39
|
return client.send(removeUserFromGroupCommand);
|
|
40
40
|
}), () => {}), Cognito_Error$ReventlessAws.retrySchedule), err => {
|
|
41
41
|
let msg = Cognito_Error$ReventlessAws.message(err);
|
|
42
|
-
return Effect$1.flatMap(EffectLogger$ReventlessCore.logError("Util_CognitoGroupUser_Runtime-ReventlessAws", undefined, `removeUserFromGroup: ` + msg), () => Effect$1.fail(msg));
|
|
42
|
+
return Effect$1.flatMap(EffectLogger$ReventlessCore.logError("Util_CognitoGroupUser_Runtime-ReventlessAws", undefined, undefined, `removeUserFromGroup: ` + msg), () => Effect$1.fail(msg));
|
|
43
43
|
}));
|
|
44
44
|
}
|
|
45
45
|
|
|
@@ -24,7 +24,7 @@ function signUp(region, userPoolId, userPoolClientId, userName, password) {
|
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
function signUpIfMissing(region, userPoolId, userPoolClientId, userName, password) {
|
|
27
|
-
return Effect$1.runPromise(Effect$1.catchAll(Effect$1.flatMap(Effect.tryPromise(Cognito_Error$ReventlessAws.classify, () => signUp(region, userPoolId, userPoolClientId, userName, password)), result => EffectLogger$ReventlessCore.logInfo("Util_Cognito_Runtime-ReventlessAws", undefined, `Created User ` + userName + ` ` + Stdlib_Option.getOr(result.UserSub, ""))), err => EffectLogger$ReventlessCore.logInfo("Util_Cognito_Runtime-ReventlessAws", undefined, Cognito_Error$ReventlessAws.message(err))));
|
|
27
|
+
return Effect$1.runPromise(Effect$1.catchAll(Effect$1.flatMap(Effect.tryPromise(Cognito_Error$ReventlessAws.classify, () => signUp(region, userPoolId, userPoolClientId, userName, password)), result => EffectLogger$ReventlessCore.logInfo("Util_Cognito_Runtime-ReventlessAws", undefined, undefined, `Created User ` + userName + ` ` + Stdlib_Option.getOr(result.UserSub, ""))), err => EffectLogger$ReventlessCore.logInfo("Util_Cognito_Runtime-ReventlessAws", undefined, undefined, Cognito_Error$ReventlessAws.message(err))));
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
export {
|
|
@@ -46,7 +46,7 @@ function putWithRetries(table, id, item) {
|
|
|
46
46
|
break;
|
|
47
47
|
}
|
|
48
48
|
let msg = err._0;
|
|
49
|
-
return Effect$1.map(EffectLogger$ReventlessCore.logError("Util_DynamoDb_Runtime-ReventlessAws", undefined, `putWithRetries: id=` + id + `: ` + msg), () => ({
|
|
49
|
+
return Effect$1.map(EffectLogger$ReventlessCore.logError("Util_DynamoDb_Runtime-ReventlessAws", undefined, undefined, `putWithRetries: id=` + id + `: ` + msg), () => ({
|
|
50
50
|
TAG: "Error",
|
|
51
51
|
_0: `put id=` + id + ` failed: ` + msg
|
|
52
52
|
}));
|
|
@@ -70,7 +70,7 @@ function putIfNotExistsWithRetries(idKey, sortKey, table, id, item) {
|
|
|
70
70
|
break;
|
|
71
71
|
}
|
|
72
72
|
let msg = err._0;
|
|
73
|
-
return Effect$1.map(EffectLogger$ReventlessCore.logError("Util_DynamoDb_Runtime-ReventlessAws", undefined, `putIfNotExistsWithRetries: id=` + id + `: ` + msg), () => ({
|
|
73
|
+
return Effect$1.map(EffectLogger$ReventlessCore.logError("Util_DynamoDb_Runtime-ReventlessAws", undefined, undefined, `putIfNotExistsWithRetries: id=` + id + `: ` + msg), () => ({
|
|
74
74
|
TAG: "Error",
|
|
75
75
|
_0: `putIfNotExists id=` + id + ` failed: ` + msg
|
|
76
76
|
}));
|
|
@@ -87,7 +87,7 @@ function deleteWithRetries(sort, table, id) {
|
|
|
87
87
|
_0: undefined
|
|
88
88
|
})), DynamoDb_Error$ReventlessAws.retrySchedule), err => {
|
|
89
89
|
let msg = DynamoDb_Error$ReventlessAws.message(err);
|
|
90
|
-
return Effect$1.map(EffectLogger$ReventlessCore.logError("Util_DynamoDb_Runtime-ReventlessAws", undefined, `delete: id=` + id + `: ` + msg), () => ({
|
|
90
|
+
return Effect$1.map(EffectLogger$ReventlessCore.logError("Util_DynamoDb_Runtime-ReventlessAws", undefined, undefined, `delete: id=` + id + `: ` + msg), () => ({
|
|
91
91
|
TAG: "Error",
|
|
92
92
|
_0: `delete id=` + id + ` failed: ` + msg
|
|
93
93
|
}));
|
|
@@ -199,7 +199,7 @@ function batchWriteWithRetries(batchWriteRequests) {
|
|
|
199
199
|
}
|
|
200
200
|
let unprocessedRequests = Stdlib_Option.getOrThrow(writeOutput.UnprocessedItems, undefined);
|
|
201
201
|
let count = Object.keys(unprocessedRequests).length.toString();
|
|
202
|
-
return Effect$1.flatMap(EffectLogger$ReventlessCore.logInfo("Util_DynamoDb_Runtime-ReventlessAws", undefined, `batchWriteWithRetries: retry ` + retry.toString() + `: ` + count + ` unprocessed items`), () => attempt(retry + 1 | 0, unprocessedRequests));
|
|
202
|
+
return Effect$1.flatMap(EffectLogger$ReventlessCore.logInfo("Util_DynamoDb_Runtime-ReventlessAws", undefined, undefined, `batchWriteWithRetries: retry ` + retry.toString() + `: ` + count + ` unprocessed items`), () => attempt(retry + 1 | 0, unprocessedRequests));
|
|
203
203
|
}), err => {
|
|
204
204
|
let msg = DynamoDb_Error$ReventlessAws.message(err);
|
|
205
205
|
return Effect$1.succeed({
|
|
@@ -14,7 +14,7 @@ function putRecord(stream, data) {
|
|
|
14
14
|
PartitionKey: ""
|
|
15
15
|
}))), param => {}), Kinesis_Error$ReventlessAws.retrySchedule), err => {
|
|
16
16
|
let msg = Kinesis_Error$ReventlessAws.message(err);
|
|
17
|
-
return Effect$1.flatMap(EffectLogger$ReventlessCore.logError("Util_Kinesis_Runtime-ReventlessAws", undefined, `putRecord: ` + msg), () => Effect$1.fail(msg));
|
|
17
|
+
return Effect$1.flatMap(EffectLogger$ReventlessCore.logError("Util_Kinesis_Runtime-ReventlessAws", undefined, undefined, `putRecord: ` + msg), () => Effect$1.fail(msg));
|
|
18
18
|
}));
|
|
19
19
|
}
|
|
20
20
|
|
|
@@ -9,14 +9,14 @@ import * as EffectLogger$ReventlessCore from "@reventlessdev/reventless-core/src
|
|
|
9
9
|
function publish(topic, message) {
|
|
10
10
|
return Effect$1.runPromise(Effect$1.catchAll(Effect$1.retry(Effect$1.map(Effect.tryPromise(SNS_Error$ReventlessAws.classify, () => SNS_Helpers$AwsSdk.publish(topic.arn, undefined, message)), param => {}), SNS_Error$ReventlessAws.retrySchedule), err => {
|
|
11
11
|
let msg = SNS_Error$ReventlessAws.message(err);
|
|
12
|
-
return Effect$1.flatMap(EffectLogger$ReventlessCore.logError("Util_SNS_Runtime-ReventlessAws", undefined, "publish: " + msg), () => Effect$1.fail(msg));
|
|
12
|
+
return Effect$1.flatMap(EffectLogger$ReventlessCore.logError("Util_SNS_Runtime-ReventlessAws", undefined, undefined, "publish: " + msg), () => Effect$1.fail(msg));
|
|
13
13
|
}));
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
function publishFifo(topic, messageGroupId, message) {
|
|
17
17
|
return Effect$1.runPromise(Effect$1.catchAll(Effect$1.retry(Effect$1.map(Effect.tryPromise(SNS_Error$ReventlessAws.classify, () => SNS_Helpers$AwsSdk.publish(topic.arn, messageGroupId, message)), param => {}), SNS_Error$ReventlessAws.retrySchedule), err => {
|
|
18
18
|
let msg = SNS_Error$ReventlessAws.message(err);
|
|
19
|
-
return Effect$1.flatMap(EffectLogger$ReventlessCore.logError("Util_SNS_Runtime-ReventlessAws", undefined, "publishFifo: " + msg), () => Effect$1.fail(msg));
|
|
19
|
+
return Effect$1.flatMap(EffectLogger$ReventlessCore.logError("Util_SNS_Runtime-ReventlessAws", undefined, undefined, "publishFifo: " + msg), () => Effect$1.fail(msg));
|
|
20
20
|
}));
|
|
21
21
|
}
|
|
22
22
|
|
|
@@ -44,7 +44,7 @@ function send(queue, queueService, commandJson) {
|
|
|
44
44
|
}
|
|
45
45
|
}), () => {}), SQS_Error$ReventlessAws.sendRetrySchedule), err => {
|
|
46
46
|
let msg = SQS_Error$ReventlessAws.message(err);
|
|
47
|
-
return Effect$1.flatMap(EffectLogger$ReventlessCore.logError("Util_SQS_Runtime-ReventlessAws", undefined, "send: " + msg), () => Effect$1.fail(msg));
|
|
47
|
+
return Effect$1.flatMap(EffectLogger$ReventlessCore.logError("Util_SQS_Runtime-ReventlessAws", undefined, undefined, "send: " + msg), () => Effect$1.fail(msg));
|
|
48
48
|
});
|
|
49
49
|
}
|
|
50
50
|
|
|
@@ -69,7 +69,7 @@ function sendMessages(queue, queueService, commandJsons) {
|
|
|
69
69
|
return failedIds.some(failedId => failedId === msgId);
|
|
70
70
|
});
|
|
71
71
|
if (retry < 5) {
|
|
72
|
-
return Effect$1.flatMap(EffectLogger$ReventlessCore.logInfo("Util_SQS_Runtime-ReventlessAws", undefined, `sendMessages: ` + failedIds.length.toString() + ` failed ids, retrying subset`), () => attempt(retry + 1 | 0, commandJsonsToRetry));
|
|
72
|
+
return Effect$1.flatMap(EffectLogger$ReventlessCore.logInfo("Util_SQS_Runtime-ReventlessAws", undefined, undefined, `sendMessages: ` + failedIds.length.toString() + ` failed ids, retrying subset`), () => attempt(retry + 1 | 0, commandJsonsToRetry));
|
|
73
73
|
}
|
|
74
74
|
let ids = failedIds.join(", ");
|
|
75
75
|
return Effect$1.fail({
|
|
@@ -79,7 +79,7 @@ function sendMessages(queue, queueService, commandJsons) {
|
|
|
79
79
|
});
|
|
80
80
|
return Effect$1.catchAll(attempt(0, commandJsons), err => {
|
|
81
81
|
let msg = SQS_Error$ReventlessAws.message(err);
|
|
82
|
-
return Effect$1.flatMap(EffectLogger$ReventlessCore.logError("Util_SQS_Runtime-ReventlessAws", undefined, `sendMessages: ` + msg), () => Effect$1.fail(msg));
|
|
82
|
+
return Effect$1.flatMap(EffectLogger$ReventlessCore.logError("Util_SQS_Runtime-ReventlessAws", undefined, undefined, `sendMessages: ` + msg), () => Effect$1.fail(msg));
|
|
83
83
|
});
|
|
84
84
|
}
|
|
85
85
|
|
|
@@ -104,7 +104,7 @@ function deleteMessages(entries, queue) {
|
|
|
104
104
|
ReceiptHandle: entry.ReceiptHandle
|
|
105
105
|
}));
|
|
106
106
|
if (retry < 5) {
|
|
107
|
-
return Effect$1.flatMap(EffectLogger$ReventlessCore.logInfo("Util_SQS_Runtime-ReventlessAws", undefined, `deleteMessages: ` + failedIds.length.toString() + ` failed ids, retrying subset`), () => attempt(retry + 1 | 0, entriesToRetry));
|
|
107
|
+
return Effect$1.flatMap(EffectLogger$ReventlessCore.logInfo("Util_SQS_Runtime-ReventlessAws", undefined, undefined, `deleteMessages: ` + failedIds.length.toString() + ` failed ids, retrying subset`), () => attempt(retry + 1 | 0, entriesToRetry));
|
|
108
108
|
}
|
|
109
109
|
let ids = failedIds.join(", ");
|
|
110
110
|
return Effect$1.fail({
|
|
@@ -114,7 +114,7 @@ function deleteMessages(entries, queue) {
|
|
|
114
114
|
});
|
|
115
115
|
return Effect$1.catchAll(attempt(0, entries), err => {
|
|
116
116
|
let msg = SQS_Error$ReventlessAws.message(err);
|
|
117
|
-
return Effect$1.flatMap(EffectLogger$ReventlessCore.logError("Util_SQS_Runtime-ReventlessAws", undefined, `deleteMessages: ` + msg), () => Effect$1.fail(msg));
|
|
117
|
+
return Effect$1.flatMap(EffectLogger$ReventlessCore.logError("Util_SQS_Runtime-ReventlessAws", undefined, undefined, `deleteMessages: ` + msg), () => Effect$1.fail(msg));
|
|
118
118
|
});
|
|
119
119
|
}
|
|
120
120
|
|
|
@@ -388,7 +388,7 @@ describe("AutomationSliceEntryPoint_Ops.makeOutboundJsonEventsHandler", () => {
|
|
|
388
388
|
let received = ref([])
|
|
389
389
|
let callback: AutomationSliceEntryPoint_Ops.outboundCallback<outboundEvent> = {
|
|
390
390
|
todoItems: Dict.make(),
|
|
391
|
-
phase1: async (events, ~capabilities as _) => {
|
|
391
|
+
phase1: async (events, ~metas as _=?, ~capabilities as _) => {
|
|
392
392
|
received := events
|
|
393
393
|
steps->Array.push("phase1")
|
|
394
394
|
},
|
|
@@ -581,7 +581,7 @@ globalThis.describe("AutomationSliceEntryPoint_Ops.makeOutboundJsonEventsHandler
|
|
|
581
581
|
contents: []
|
|
582
582
|
};
|
|
583
583
|
let callback_todoItems = {};
|
|
584
|
-
let callback_phase1 = async (events, param) => {
|
|
584
|
+
let callback_phase1 = async (events, param, param$1) => {
|
|
585
585
|
received.contents = events;
|
|
586
586
|
steps.push("phase1");
|
|
587
587
|
};
|