@izara_project/izara-core-library-asynchronous-flow 1.0.21 → 1.0.23

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@izara_project/izara-core-library-asynchronous-flow",
3
- "version": "1.0.21",
3
+ "version": "1.0.23",
4
4
  "description": "Shared asynchronous flow logic",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -194,7 +194,7 @@ export async function checkUniqueRequestProcessing(
194
194
  //* get record from dynamo
195
195
  let existingRecord = await dynamodbSharedLib.getItem(
196
196
  _izContext,
197
- await dynamodbSharedLib.tableName(_izContext, tableName),
197
+ dynamodbSharedLib.tableName(_izContext, tableName),
198
198
  primaryKey
199
199
  );
200
200
  _izContext.logger.debug('existingRecord:', existingRecord);
@@ -230,7 +230,7 @@ export async function checkUniqueRequestProcessing(
230
230
  try {
231
231
  updateRecord = await dynamodbSharedLib.updateItem(
232
232
  _izContext,
233
- await dynamodbSharedLib.tableName(_izContext, tableName),
233
+ dynamodbSharedLib.tableName(_izContext, tableName),
234
234
  primaryKey,
235
235
  updateAttributes,
236
236
  queryElementsWhenUpdate,
@@ -58,14 +58,14 @@ export async function createAwaitingMultipleStepsWithAdditionalAttributes(
58
58
  promiseArray.push(
59
59
  dynamodbSharedLib.putItem(
60
60
  _izContext,
61
- await dynamodbSharedLib.tableName(_izContext, 'AwaitingMultipleSteps'),
61
+ dynamodbSharedLib.tableName(_izContext, 'AwaitingMultipleSteps'),
62
62
  attributesWhenCreate
63
63
  )
64
64
  );
65
65
  promiseArray.push(
66
66
  dynamodbSharedLib.putItem(
67
67
  _izContext,
68
- await dynamodbSharedLib.tableName(
68
+ dynamodbSharedLib.tableName(
69
69
  _izContext,
70
70
  'AwaitingMultipleStepByPending'
71
71
  ),
@@ -81,43 +81,53 @@ export async function createAwaitingMultipleStepsWithAdditionalAttributes(
81
81
  await Promise.all(promiseArray);
82
82
  }
83
83
 
84
- export async function createAwaitingMultipleStepsWithAdditionalAttributesV2(
84
+ /**
85
+ * Batch initializes multiple pending steps in DynamoDB.
86
+ * Records status in both the primary tracking table and the pending-relation table.
87
+ * * @async
88
+ * @param {Object} _izContext - The system context providing logger and shared utilities.
89
+ * @param {Array<Object>} records - Array of step objects to be initialized.
90
+ * @param {string} records[].awaitingStepId - The unique identifier for the specific step.
91
+ * @param {Object} [records[].additionalAttributes] - Optional metadata to store with the step.
92
+ * @param {string} pendingStepId - The parent ID linking all related steps together.
93
+ * @returns {Promise<void>}
94
+ */
95
+ export async function initAwaitingStepsWithAttrs(
85
96
  _izContext,
86
- records, // array of object including properties: awaitingStepId / (optional) additionalAttributes
97
+ records,
87
98
  pendingStepId
88
99
  ) {
89
- _izContext.logger.debug(
90
- 'Lib:createAwaitingMultipleStepsWithAdditionalAttributesV2',
91
- {
92
- records: records,
93
- pendingStepId: pendingStepId
94
- }
95
- );
100
+ _izContext.logger.debug('Lib:initAwaitingStepsWithAttrs', {
101
+ records,
102
+ pendingStepId
103
+ });
104
+
105
+ const timestamp = Date.now();
96
106
  const promiseArray = [];
97
107
 
98
- for (let record of records) {
108
+ for (const record of records) {
99
109
  promiseArray.push(
100
110
  dynamodbSharedLib.putItem(
101
111
  _izContext,
102
- await dynamodbSharedLib.tableName(_izContext, 'AwaitingMultipleSteps'),
112
+ dynamodbSharedLib.tableName(_izContext, 'AwaitingMultipleSteps'),
103
113
  {
104
114
  awaitingStepId: record.awaitingStepId,
105
- pendingStepId: pendingStepId,
106
- timestamp: Date.now()
115
+ pendingStepId,
116
+ timestamp
107
117
  }
108
118
  )
109
119
  );
110
120
  promiseArray.push(
111
121
  dynamodbSharedLib.putItem(
112
122
  _izContext,
113
- await dynamodbSharedLib.tableName(
123
+ dynamodbSharedLib.tableName(
114
124
  _izContext,
115
125
  'AwaitingMultipleStepByPending'
116
126
  ),
117
127
  {
118
- pendingStepId: pendingStepId,
128
+ pendingStepId,
119
129
  awaitingStepId: record.awaitingStepId,
120
- timestamp: Date.now(),
130
+ timestamp,
121
131
  ...record.additionalAttributes
122
132
  }
123
133
  )
@@ -160,7 +170,7 @@ export async function createAwaitingMultipleSteps(
160
170
  promiseArray.push(
161
171
  dynamodbSharedLib.putItem(
162
172
  _izContext,
163
- await dynamodbSharedLib.tableName(_izContext, 'AwaitingMultipleSteps'),
173
+ dynamodbSharedLib.tableName(_izContext, 'AwaitingMultipleSteps'),
164
174
  attributesWhenCreate
165
175
  )
166
176
  );
@@ -171,7 +181,7 @@ export async function createAwaitingMultipleSteps(
171
181
  promiseArray.push(
172
182
  dynamodbSharedLib.putItem(
173
183
  _izContext,
174
- await dynamodbSharedLib.tableName(
184
+ dynamodbSharedLib.tableName(
175
185
  _izContext,
176
186
  'AwaitingMultipleStepByPending'
177
187
  ),
@@ -197,7 +207,7 @@ export async function findPendingStepIdsAwaitingMultipleSteps(
197
207
 
198
208
  let listPendingStepIds = await dynamodbSharedLib.query(
199
209
  _izContext,
200
- await dynamodbSharedLib.tableName(_izContext, 'AwaitingMultipleSteps'),
210
+ dynamodbSharedLib.tableName(_izContext, 'AwaitingMultipleSteps'),
201
211
  {
202
212
  awaitingStepId: awaitingStepId
203
213
  }
@@ -223,7 +233,7 @@ export async function findPendingStepsAwaitingMultipleSteps(
223
233
  ) {
224
234
  let listPendingSteps = await dynamodbSharedLib.query(
225
235
  _izContext,
226
- await dynamodbSharedLib.tableName(_izContext, 'AwaitingMultipleSteps'),
236
+ dynamodbSharedLib.tableName(_izContext, 'AwaitingMultipleSteps'),
227
237
  {
228
238
  awaitingStepId: awaitingStepId
229
239
  }
@@ -246,7 +256,7 @@ export async function findPendingStepAwaitingMultipleSteps(
246
256
  ) {
247
257
  let listPendingSteps = await dynamodbSharedLib.query(
248
258
  _izContext,
249
- await dynamodbSharedLib.tableName(_izContext, 'AwaitingMultipleSteps'),
259
+ dynamodbSharedLib.tableName(_izContext, 'AwaitingMultipleSteps'),
250
260
  {
251
261
  awaitingStepId: awaitingStepId
252
262
  }
@@ -278,10 +288,7 @@ export async function findAwaitingMultipleStepByPending(
278
288
  ) {
279
289
  let listAwaitingSteps = await dynamodbSharedLib.query(
280
290
  _izContext,
281
- await dynamodbSharedLib.tableName(
282
- _izContext,
283
- 'AwaitingMultipleStepByPending'
284
- ),
291
+ dynamodbSharedLib.tableName(_izContext, 'AwaitingMultipleStepByPending'),
285
292
  {
286
293
  pendingStepId: pendingStepId
287
294
  }
@@ -303,7 +310,7 @@ export async function findAwaitingMultipleStepByPending(
303
310
  * @param {Attrs} [additionalAttributes={}]
304
311
  * @returns {Promise<boolean>}
305
312
  */
306
- export async function checkAllAwaitingStepsFinishedWithError(
313
+ export async function checkAllAwaitingStepsFinished(
307
314
  _izContext,
308
315
  pendingStepId,
309
316
  currentAwaitingStepId = null,
@@ -319,10 +326,7 @@ export async function checkAllAwaitingStepsFinishedWithError(
319
326
  if (currentAwaitingStepId) {
320
327
  await dynamodbSharedLib.updateItem(
321
328
  _izContext,
322
- await dynamodbSharedLib.tableName(
323
- _izContext,
324
- 'AwaitingMultipleStepByPending'
325
- ),
329
+ dynamodbSharedLib.tableName(_izContext, 'AwaitingMultipleStepByPending'),
326
330
  {
327
331
  pendingStepId: pendingStepId,
328
332
  awaitingStepId: currentAwaitingStepId
@@ -336,10 +340,7 @@ export async function checkAllAwaitingStepsFinishedWithError(
336
340
  }
337
341
  let listPendingStepIds = await dynamodbSharedLib.query(
338
342
  _izContext,
339
- await dynamodbSharedLib.tableName(
340
- _izContext,
341
- 'AwaitingMultipleStepByPending'
342
- ),
343
+ dynamodbSharedLib.tableName(_izContext, 'AwaitingMultipleStepByPending'),
343
344
  {
344
345
  pendingStepId: pendingStepId
345
346
  },
@@ -377,10 +378,7 @@ export async function clearAllAwaitingSteps(_izContext, pendingStepId) {
377
378
  // ----- query items from GSI table
378
379
  let listPendingStepIds = await dynamodbSharedLib.query(
379
380
  _izContext,
380
- await dynamodbSharedLib.tableName(
381
- _izContext,
382
- 'AwaitingMultipleStepByPending'
383
- ),
381
+ dynamodbSharedLib.tableName(_izContext, 'AwaitingMultipleStepByPending'),
384
382
  {
385
383
  pendingStepId: pendingStepId
386
384
  }
@@ -394,7 +392,7 @@ export async function clearAllAwaitingSteps(_izContext, pendingStepId) {
394
392
  promiseArray.push(
395
393
  dynamodbSharedLib.deleteItem(
396
394
  _izContext,
397
- await dynamodbSharedLib.tableName(_izContext, 'AwaitingMultipleSteps'),
395
+ dynamodbSharedLib.tableName(_izContext, 'AwaitingMultipleSteps'),
398
396
  {
399
397
  awaitingStepId: listPendingStepIds.Items[idx].awaitingStepId,
400
398
  pendingStepId: listPendingStepIds.Items[idx].pendingStepId
@@ -408,7 +406,7 @@ export async function clearAllAwaitingSteps(_izContext, pendingStepId) {
408
406
  promiseArray.push(
409
407
  dynamodbSharedLib.deleteItem(
410
408
  _izContext,
411
- await dynamodbSharedLib.tableName(
409
+ dynamodbSharedLib.tableName(
412
410
  _izContext,
413
411
  'AwaitingMultipleStepByPending'
414
412
  ),
@@ -468,7 +466,7 @@ export async function removeAwaitingMultipleStep(
468
466
  promiseArray.push(
469
467
  dynamodbSharedLib.deleteItem(
470
468
  _izContext,
471
- await dynamodbSharedLib.tableName(_izContext, 'AwaitingMultipleSteps'),
469
+ dynamodbSharedLib.tableName(_izContext, 'AwaitingMultipleSteps'),
472
470
  keyValues
473
471
  )
474
472
  );
@@ -480,7 +478,7 @@ export async function removeAwaitingMultipleStep(
480
478
  promiseArray.push(
481
479
  dynamodbSharedLib.deleteItem(
482
480
  _izContext,
483
- await dynamodbSharedLib.tableName(
481
+ dynamodbSharedLib.tableName(
484
482
  _izContext,
485
483
  'AwaitingMultipleStepByPending'
486
484
  ),
@@ -503,7 +501,7 @@ export async function removeAwaitingMultipleStep(
503
501
  * @param {Attrs} [additionalAttributes={}]
504
502
  * @returns {Promise<[boolean, Record<string, any>|null]>} A tuple indicating completion status and the collected attributes, or null if not all steps are complete.
505
503
  */
506
- export async function checkAllAwaitingMultipleStepsFinishedWithErrorAndReturnAdditionalAttributes(
504
+ export async function syncAndCheckStepsCompletion(
507
505
  _izContext,
508
506
  pendingStepId,
509
507
  currentAwaitingStepId = null,
@@ -523,46 +521,43 @@ export async function checkAllAwaitingMultipleStepsFinishedWithErrorAndReturnAdd
523
521
  if (currentAwaitingStepId) {
524
522
  await dynamodbSharedLib.updateItem(
525
523
  _izContext,
526
- await dynamodbSharedLib.tableName(
527
- _izContext,
528
- 'AwaitingMultipleStepByPending'
529
- ),
524
+ dynamodbSharedLib.tableName(_izContext, 'AwaitingMultipleStepByPending'),
530
525
  { pendingStepId, awaitingStepId: currentAwaitingStepId },
531
526
  {
532
527
  complete: true,
533
528
  errorsFound,
534
- ...additionalAttributes
529
+ additionalAttributes
535
530
  }
536
531
  );
537
532
  }
538
533
 
539
534
  const awaitingStepItems = await dynamodbSharedLib.query(
540
535
  _izContext,
541
- await dynamodbSharedLib.tableName(
542
- _izContext,
543
- 'AwaitingMultipleStepByPending'
544
- ),
536
+ dynamodbSharedLib.tableName(_izContext, 'AwaitingMultipleStepByPending'),
545
537
  { pendingStepId },
546
538
  {
547
- limit: 50 // arbitrary limit so not pull too many results, need >2 because some others might be marked as "complete" = true
539
+ limit: 50
548
540
  }
549
541
  );
550
542
 
543
+ _izContext.logger.debug('awaitingStepItems:::', awaitingStepItems);
544
+
551
545
  const collectedAttributes = {};
546
+ const collectedErrors = [];
547
+
552
548
  for (const item of awaitingStepItems.Items) {
553
- // For any step OTHER than the one we just completed, if it's not marked as complete,
554
- // then the overall process is not finished.
555
549
  if (item.awaitingStepId !== currentAwaitingStepId && !item.complete) {
556
- return [false, null];
550
+ return [false, null, []];
551
+ }
552
+
553
+ if (item.errorsFound?.length > 0) {
554
+ collectedErrors.push(...item.errorsFound);
557
555
  }
558
556
 
559
- // If the step is complete (which all should be if we reach this point),
560
- // collect its attributes if they exist.
561
557
  if (item.additionalAttributes) {
562
558
  collectedAttributes[item.awaitingStepId] = item.additionalAttributes;
563
559
  }
564
560
  }
565
561
 
566
- // If the loop completes, it means all steps were finished.
567
- return [true, collectedAttributes];
562
+ return [true, collectedAttributes, collectedErrors];
568
563
  }
@@ -65,7 +65,7 @@ export async function createAwaitingStep(
65
65
 
66
66
  await dynamodbSharedLib.putItem(
67
67
  _izContext,
68
- await dynamodbSharedLib.tableName(_izContext, 'AwaitingStep'),
68
+ dynamodbSharedLib.tableName(_izContext, 'AwaitingStep'),
69
69
  attributesWhenCreate
70
70
  );
71
71
  }
@@ -85,7 +85,7 @@ export async function findPendingStepIdsAwaitingStep(
85
85
 
86
86
  let listPendingStepIds = await dynamodbSharedLib.query(
87
87
  _izContext,
88
- await dynamodbSharedLib.tableName(_izContext, 'AwaitingStep'),
88
+ dynamodbSharedLib.tableName(_izContext, 'AwaitingStep'),
89
89
  {
90
90
  awaitingStepId: awaitingStepId
91
91
  }
@@ -108,7 +108,7 @@ export async function findPendingStepIdsAwaitingStep(
108
108
  export async function findPendingStepsAwaitingStep(_izContext, awaitingStepId) {
109
109
  let listPendingSteps = await dynamodbSharedLib.query(
110
110
  _izContext,
111
- await dynamodbSharedLib.tableName(_izContext, 'AwaitingStep'),
111
+ dynamodbSharedLib.tableName(_izContext, 'AwaitingStep'),
112
112
  {
113
113
  awaitingStepId: awaitingStepId
114
114
  }
@@ -128,7 +128,7 @@ export async function findPendingStepsAwaitingStep(_izContext, awaitingStepId) {
128
128
  export async function findPendingStepAwaitingStep(_izContext, awaitingStepId) {
129
129
  let listPendingSteps = await dynamodbSharedLib.query(
130
130
  _izContext,
131
- await dynamodbSharedLib.tableName(_izContext, 'AwaitingStep'),
131
+ dynamodbSharedLib.tableName(_izContext, 'AwaitingStep'),
132
132
  {
133
133
  awaitingStepId: awaitingStepId
134
134
  }
@@ -186,7 +186,7 @@ export async function removeAwaitingStep(
186
186
  ) {
187
187
  await dynamodbSharedLib.deleteItem(
188
188
  _izContext,
189
- await dynamodbSharedLib.tableName(_izContext, 'AwaitingStep'),
189
+ dynamodbSharedLib.tableName(_izContext, 'AwaitingStep'),
190
190
  {
191
191
  awaitingStepId: awaitingStepId,
192
192
  pendingStepId: pendingStepId
@@ -231,7 +231,7 @@ export async function removeAwaitingStepWithCheckUniqueRequestId(
231
231
 
232
232
  await dynamodbSharedLib.deleteItem(
233
233
  _izContext,
234
- await dynamodbSharedLib.tableName(_izContext, 'AwaitingStep'),
234
+ dynamodbSharedLib.tableName(_izContext, 'AwaitingStep'),
235
235
  {
236
236
  awaitingStepId: awaitingStepId,
237
237
  pendingStepId: pendingStepId