@memberjunction/core-actions 2.54.0 → 2.56.0

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.
Files changed (118) hide show
  1. package/dist/custom/ai/execute-ai-prompt.action.d.ts +94 -0
  2. package/dist/custom/ai/execute-ai-prompt.action.d.ts.map +1 -0
  3. package/dist/custom/ai/execute-ai-prompt.action.js +274 -0
  4. package/dist/custom/ai/execute-ai-prompt.action.js.map +1 -0
  5. package/dist/custom/communication/slack-webhook.action.d.ts +101 -0
  6. package/dist/custom/communication/slack-webhook.action.d.ts.map +1 -0
  7. package/dist/custom/communication/slack-webhook.action.js +269 -0
  8. package/dist/custom/communication/slack-webhook.action.js.map +1 -0
  9. package/dist/custom/communication/teams-webhook.action.d.ts +96 -0
  10. package/dist/custom/communication/teams-webhook.action.d.ts.map +1 -0
  11. package/dist/custom/communication/teams-webhook.action.js +275 -0
  12. package/dist/custom/communication/teams-webhook.action.js.map +1 -0
  13. package/dist/custom/data/aggregate-data.action.d.ts +91 -0
  14. package/dist/custom/data/aggregate-data.action.d.ts.map +1 -0
  15. package/dist/custom/data/aggregate-data.action.js +333 -0
  16. package/dist/custom/data/aggregate-data.action.js.map +1 -0
  17. package/dist/custom/data/csv-parser.action.d.ts +68 -0
  18. package/dist/custom/data/csv-parser.action.d.ts.map +1 -0
  19. package/dist/custom/data/csv-parser.action.js +184 -0
  20. package/dist/custom/data/csv-parser.action.js.map +1 -0
  21. package/dist/custom/data/data-mapper.action.d.ts +89 -0
  22. package/dist/custom/data/data-mapper.action.d.ts.map +1 -0
  23. package/dist/custom/data/data-mapper.action.js +325 -0
  24. package/dist/custom/data/data-mapper.action.js.map +1 -0
  25. package/dist/custom/data/json-transform.action.d.ts +57 -0
  26. package/dist/custom/data/json-transform.action.d.ts.map +1 -0
  27. package/dist/custom/data/json-transform.action.js +205 -0
  28. package/dist/custom/data/json-transform.action.js.map +1 -0
  29. package/dist/custom/data/xml-parser.action.d.ts +85 -0
  30. package/dist/custom/data/xml-parser.action.d.ts.map +1 -0
  31. package/dist/custom/data/xml-parser.action.js +326 -0
  32. package/dist/custom/data/xml-parser.action.js.map +1 -0
  33. package/dist/custom/files/excel-reader.action.d.ts +86 -0
  34. package/dist/custom/files/excel-reader.action.d.ts.map +1 -0
  35. package/dist/custom/files/excel-reader.action.js +348 -0
  36. package/dist/custom/files/excel-reader.action.js.map +1 -0
  37. package/dist/custom/files/excel-writer.action.d.ts +79 -0
  38. package/dist/custom/files/excel-writer.action.d.ts.map +1 -0
  39. package/dist/custom/files/excel-writer.action.js +325 -0
  40. package/dist/custom/files/excel-writer.action.js.map +1 -0
  41. package/dist/custom/files/file-compress.action.d.ts +90 -0
  42. package/dist/custom/files/file-compress.action.d.ts.map +1 -0
  43. package/dist/custom/files/file-compress.action.js +346 -0
  44. package/dist/custom/files/file-compress.action.js.map +1 -0
  45. package/dist/custom/files/pdf-extractor.action.d.ts +86 -0
  46. package/dist/custom/files/pdf-extractor.action.d.ts.map +1 -0
  47. package/dist/custom/files/pdf-extractor.action.js +247 -0
  48. package/dist/custom/files/pdf-extractor.action.js.map +1 -0
  49. package/dist/custom/files/pdf-generator.action.d.ts +70 -0
  50. package/dist/custom/files/pdf-generator.action.d.ts.map +1 -0
  51. package/dist/custom/files/pdf-generator.action.js +286 -0
  52. package/dist/custom/files/pdf-generator.action.js.map +1 -0
  53. package/dist/custom/integration/api-rate-limiter.action.d.ts +88 -0
  54. package/dist/custom/integration/api-rate-limiter.action.d.ts.map +1 -0
  55. package/dist/custom/integration/api-rate-limiter.action.js +363 -0
  56. package/dist/custom/integration/api-rate-limiter.action.js.map +1 -0
  57. package/dist/custom/integration/graphql-query.action.d.ts +92 -0
  58. package/dist/custom/integration/graphql-query.action.d.ts.map +1 -0
  59. package/dist/custom/integration/graphql-query.action.js +251 -0
  60. package/dist/custom/integration/graphql-query.action.js.map +1 -0
  61. package/dist/custom/integration/http-request.action.d.ts +96 -0
  62. package/dist/custom/integration/http-request.action.d.ts.map +1 -0
  63. package/dist/custom/integration/http-request.action.js +316 -0
  64. package/dist/custom/integration/http-request.action.js.map +1 -0
  65. package/dist/custom/integration/oauth-flow.action.d.ts +130 -0
  66. package/dist/custom/integration/oauth-flow.action.d.ts.map +1 -0
  67. package/dist/custom/integration/oauth-flow.action.js +624 -0
  68. package/dist/custom/integration/oauth-flow.action.js.map +1 -0
  69. package/dist/custom/security/password-strength.action.d.ts +129 -0
  70. package/dist/custom/security/password-strength.action.d.ts.map +1 -0
  71. package/dist/custom/security/password-strength.action.js +463 -0
  72. package/dist/custom/security/password-strength.action.js.map +1 -0
  73. package/dist/custom/utilities/base-file-handler.d.ts +54 -0
  74. package/dist/custom/utilities/base-file-handler.d.ts.map +1 -0
  75. package/dist/custom/utilities/base-file-handler.js +167 -0
  76. package/dist/custom/utilities/base-file-handler.js.map +1 -0
  77. package/dist/custom/utilities/index.d.ts +3 -0
  78. package/dist/custom/utilities/index.d.ts.map +1 -0
  79. package/dist/custom/utilities/index.js +19 -0
  80. package/dist/custom/utilities/index.js.map +1 -0
  81. package/dist/custom/utilities/json-param-helper.d.ts +33 -0
  82. package/dist/custom/utilities/json-param-helper.d.ts.map +1 -0
  83. package/dist/custom/utilities/json-param-helper.js +66 -0
  84. package/dist/custom/utilities/json-param-helper.js.map +1 -0
  85. package/dist/custom/web/duckduckgo-rate-limiter.d.ts +85 -0
  86. package/dist/custom/web/duckduckgo-rate-limiter.d.ts.map +1 -0
  87. package/dist/custom/web/duckduckgo-rate-limiter.js +257 -0
  88. package/dist/custom/web/duckduckgo-rate-limiter.js.map +1 -0
  89. package/dist/custom/web/web-search.action.d.ts +1 -0
  90. package/dist/custom/web/web-search.action.d.ts.map +1 -1
  91. package/dist/custom/web/web-search.action.js +48 -20
  92. package/dist/custom/web/web-search.action.js.map +1 -1
  93. package/dist/custom/workflow/conditional.action.d.ts +94 -0
  94. package/dist/custom/workflow/conditional.action.d.ts.map +1 -0
  95. package/dist/custom/workflow/conditional.action.js +274 -0
  96. package/dist/custom/workflow/conditional.action.js.map +1 -0
  97. package/dist/custom/workflow/delay.action.d.ts +76 -0
  98. package/dist/custom/workflow/delay.action.d.ts.map +1 -0
  99. package/dist/custom/workflow/delay.action.js +187 -0
  100. package/dist/custom/workflow/delay.action.js.map +1 -0
  101. package/dist/custom/workflow/loop.action.d.ts +112 -0
  102. package/dist/custom/workflow/loop.action.d.ts.map +1 -0
  103. package/dist/custom/workflow/loop.action.js +380 -0
  104. package/dist/custom/workflow/loop.action.js.map +1 -0
  105. package/dist/custom/workflow/parallel-execute.action.d.ts +105 -0
  106. package/dist/custom/workflow/parallel-execute.action.d.ts.map +1 -0
  107. package/dist/custom/workflow/parallel-execute.action.js +457 -0
  108. package/dist/custom/workflow/parallel-execute.action.js.map +1 -0
  109. package/dist/custom/workflow/retry.action.d.ts +90 -0
  110. package/dist/custom/workflow/retry.action.d.ts.map +1 -0
  111. package/dist/custom/workflow/retry.action.js +378 -0
  112. package/dist/custom/workflow/retry.action.js.map +1 -0
  113. package/dist/index.d.ts +23 -0
  114. package/dist/index.d.ts.map +1 -1
  115. package/dist/index.js +75 -0
  116. package/dist/index.js.map +1 -1
  117. package/package.json +25 -10
  118. package/readme.md +11270 -101
@@ -0,0 +1,380 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.LoadLoopAction = exports.LoopAction = void 0;
10
+ const global_1 = require("@memberjunction/global");
11
+ const actions_1 = require("@memberjunction/actions");
12
+ const actions_2 = require("@memberjunction/actions");
13
+ const json_param_helper_1 = require("../utilities/json-param-helper");
14
+ /**
15
+ * Action that iterates over collections executing actions for each item
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * // Process array of items
20
+ * await runAction({
21
+ * ActionName: 'Loop',
22
+ * Params: [{
23
+ * Name: 'Items',
24
+ * Value: [
25
+ * { name: 'John', email: 'john@example.com' },
26
+ * { name: 'Jane', email: 'jane@example.com' }
27
+ * ]
28
+ * }, {
29
+ * Name: 'ItemVariableName',
30
+ * Value: 'user'
31
+ * }, {
32
+ * Name: 'Action',
33
+ * Value: {
34
+ * ActionName: 'Send Single Message',
35
+ * Params: {
36
+ * To: '{{user.email}}',
37
+ * Subject: 'Welcome {{user.name}}'
38
+ * }
39
+ * }
40
+ * }]
41
+ * });
42
+ *
43
+ * // Parallel processing with limit
44
+ * await runAction({
45
+ * ActionName: 'Loop',
46
+ * Params: [{
47
+ * Name: 'Items',
48
+ * Value: fileUrls
49
+ * }, {
50
+ * Name: 'Parallel',
51
+ * Value: true
52
+ * }, {
53
+ * Name: 'MaxConcurrent',
54
+ * Value: 5
55
+ * }, {
56
+ * Name: 'Action',
57
+ * Value: {
58
+ * ActionName: 'Web Page Content',
59
+ * Params: { URL: '{{item}}' }
60
+ * }
61
+ * }]
62
+ * });
63
+ * ```
64
+ */
65
+ let LoopAction = class LoopAction extends actions_1.BaseAction {
66
+ /**
67
+ * Iterates over collections executing actions
68
+ *
69
+ * @param params - The action parameters containing:
70
+ * - Items: Array to iterate over (required)
71
+ * - ItemVariableName: Variable name for current item (default: 'item')
72
+ * - IndexVariableName: Variable name for current index (default: 'index')
73
+ * - Action: Action configuration to execute per item (required)
74
+ * - Parallel: Boolean - run iterations in parallel (default: false)
75
+ * - MaxConcurrent: Max parallel executions (default: 10)
76
+ * - ContinueOnError: Boolean - continue if an iteration fails (default: false)
77
+ * - IncludeContext: Additional context to pass to each action (optional)
78
+ *
79
+ * @returns Array of results from each iteration
80
+ */
81
+ async InternalRunAction(params) {
82
+ try {
83
+ const items = json_param_helper_1.JSONParamHelper.getJSONParam(params, 'items');
84
+ const itemVariableName = this.getParamValue(params, 'itemvariablename') || 'item';
85
+ const indexVariableName = this.getParamValue(params, 'indexvariablename') || 'index';
86
+ const actionConfig = json_param_helper_1.JSONParamHelper.getJSONParam(params, 'action');
87
+ const parallel = this.getBooleanParam(params, 'parallel', false);
88
+ const maxConcurrent = this.getNumericParam(params, 'maxconcurrent', 10);
89
+ const continueOnError = this.getBooleanParam(params, 'continueonerror', false);
90
+ const includeContext = json_param_helper_1.JSONParamHelper.getJSONParam(params, 'includecontext') || {};
91
+ // Validate required parameters
92
+ if (!items) {
93
+ return {
94
+ Success: false,
95
+ Message: "Items parameter is required",
96
+ ResultCode: "MISSING_ITEMS"
97
+ };
98
+ }
99
+ if (!Array.isArray(items)) {
100
+ return {
101
+ Success: false,
102
+ Message: "Items must be an array",
103
+ ResultCode: "INVALID_ITEMS"
104
+ };
105
+ }
106
+ if (!actionConfig) {
107
+ return {
108
+ Success: false,
109
+ Message: "Action parameter is required",
110
+ ResultCode: "MISSING_ACTION"
111
+ };
112
+ }
113
+ if (!actionConfig.ActionName) {
114
+ return {
115
+ Success: false,
116
+ Message: "Action configuration must include ActionName",
117
+ ResultCode: "INVALID_ACTION"
118
+ };
119
+ }
120
+ // Track results
121
+ const results = [];
122
+ const errors = [];
123
+ let successCount = 0;
124
+ let errorCount = 0;
125
+ // Execute iterations
126
+ if (parallel) {
127
+ // Parallel execution with concurrency limit
128
+ const chunks = this.chunkArray(items, maxConcurrent);
129
+ for (const chunk of chunks) {
130
+ const chunkPromises = chunk.map((item, chunkIndex) => {
131
+ const globalIndex = chunks.indexOf(chunk) * maxConcurrent + chunkIndex;
132
+ return this.executeIteration(item, globalIndex, itemVariableName, indexVariableName, actionConfig, includeContext, params.ContextUser);
133
+ });
134
+ const chunkResults = await Promise.allSettled(chunkPromises);
135
+ for (let i = 0; i < chunkResults.length; i++) {
136
+ const result = chunkResults[i];
137
+ const globalIndex = chunks.indexOf(chunk) * maxConcurrent + i;
138
+ if (result.status === 'fulfilled') {
139
+ results[globalIndex] = result.value;
140
+ if (result.value.Success) {
141
+ successCount++;
142
+ }
143
+ else {
144
+ errorCount++;
145
+ errors.push({ index: globalIndex, error: result.value.Message });
146
+ if (!continueOnError)
147
+ break;
148
+ }
149
+ }
150
+ else {
151
+ errorCount++;
152
+ const errorResult = {
153
+ Success: false,
154
+ Message: result.reason?.message || String(result.reason),
155
+ ResultCode: "ITERATION_ERROR"
156
+ };
157
+ results[globalIndex] = errorResult;
158
+ errors.push({ index: globalIndex, error: result.reason });
159
+ if (!continueOnError)
160
+ break;
161
+ }
162
+ }
163
+ if (!continueOnError && errorCount > 0)
164
+ break;
165
+ }
166
+ }
167
+ else {
168
+ // Sequential execution
169
+ for (let i = 0; i < items.length; i++) {
170
+ try {
171
+ const result = await this.executeIteration(items[i], i, itemVariableName, indexVariableName, actionConfig, includeContext, params.ContextUser);
172
+ results.push(result);
173
+ if (result.Success) {
174
+ successCount++;
175
+ }
176
+ else {
177
+ errorCount++;
178
+ errors.push({ index: i, error: result.Message });
179
+ if (!continueOnError)
180
+ break;
181
+ }
182
+ }
183
+ catch (error) {
184
+ errorCount++;
185
+ const errorResult = {
186
+ Success: false,
187
+ Message: error instanceof Error ? error.message : String(error),
188
+ ResultCode: "ITERATION_ERROR"
189
+ };
190
+ results.push(errorResult);
191
+ errors.push({ index: i, error: error });
192
+ if (!continueOnError)
193
+ break;
194
+ }
195
+ }
196
+ }
197
+ // Add output parameters
198
+ params.Params.push({
199
+ Name: 'Results',
200
+ Type: 'Output',
201
+ Value: results
202
+ });
203
+ params.Params.push({
204
+ Name: 'SuccessCount',
205
+ Type: 'Output',
206
+ Value: successCount
207
+ });
208
+ params.Params.push({
209
+ Name: 'ErrorCount',
210
+ Type: 'Output',
211
+ Value: errorCount
212
+ });
213
+ if (errors.length > 0) {
214
+ params.Params.push({
215
+ Name: 'Errors',
216
+ Type: 'Output',
217
+ Value: errors
218
+ });
219
+ }
220
+ // Determine overall success
221
+ const allSuccessful = errorCount === 0;
222
+ const someSuccessful = successCount > 0;
223
+ return {
224
+ Success: continueOnError ? someSuccessful : allSuccessful,
225
+ ResultCode: allSuccessful ? "ALL_SUCCESS" : (someSuccessful ? "PARTIAL_SUCCESS" : "ALL_FAILED"),
226
+ Message: JSON.stringify({
227
+ message: `Loop completed: ${successCount} successful, ${errorCount} failed`,
228
+ totalItems: items.length,
229
+ successCount: successCount,
230
+ errorCount: errorCount,
231
+ parallel: parallel,
232
+ continueOnError: continueOnError,
233
+ errors: errors.length > 0 ? errors : undefined
234
+ }, null, 2)
235
+ };
236
+ }
237
+ catch (error) {
238
+ return {
239
+ Success: false,
240
+ Message: `Loop action failed: ${error instanceof Error ? error.message : String(error)}`,
241
+ ResultCode: "LOOP_FAILED"
242
+ };
243
+ }
244
+ }
245
+ /**
246
+ * Execute a single iteration
247
+ */
248
+ async executeIteration(item, index, itemVariableName, indexVariableName, actionConfig, includeContext, contextUser) {
249
+ // Build context for this iteration
250
+ const iterationContext = {
251
+ ...includeContext,
252
+ [itemVariableName]: item,
253
+ [indexVariableName]: index
254
+ };
255
+ // Prepare action configuration with context
256
+ const preparedConfig = this.prepareActionConfig(actionConfig, iterationContext);
257
+ // Execute the action
258
+ const engine = new actions_2.ActionEngineServer();
259
+ const result = await engine.RunAction(preparedConfig);
260
+ // Convert ActionResult to ActionResultSimple
261
+ return {
262
+ Success: result.Success,
263
+ ResultCode: result.Result?.ResultCode || (result.Success ? "SUCCESS" : "FAILED"),
264
+ Message: result.Message,
265
+ Params: result.Params
266
+ };
267
+ }
268
+ /**
269
+ * Prepare action configuration with template replacement
270
+ */
271
+ prepareActionConfig(actionConfig, context) {
272
+ // Deep clone the config
273
+ const preparedConfig = JSON.parse(JSON.stringify(actionConfig));
274
+ // Replace templates in the configuration
275
+ this.replaceTemplates(preparedConfig, context);
276
+ return preparedConfig;
277
+ }
278
+ /**
279
+ * Replace template variables in object recursively
280
+ */
281
+ replaceTemplates(obj, context) {
282
+ if (typeof obj === 'string') {
283
+ // Can't modify string in place, would need parent reference
284
+ return;
285
+ }
286
+ for (const key in obj) {
287
+ if (obj.hasOwnProperty(key)) {
288
+ const value = obj[key];
289
+ if (typeof value === 'string') {
290
+ // Replace template variables
291
+ obj[key] = this.replaceTemplateString(value, context);
292
+ }
293
+ else if (typeof value === 'object' && value !== null) {
294
+ // Recurse into objects and arrays
295
+ this.replaceTemplates(value, context);
296
+ }
297
+ }
298
+ }
299
+ }
300
+ /**
301
+ * Replace template variables in a string
302
+ */
303
+ replaceTemplateString(template, context) {
304
+ // Simple template replacement for {{variable}} and {{object.property}}
305
+ return template.replace(/\{\{([^}]+)\}\}/g, (match, path) => {
306
+ const trimmedPath = path.trim();
307
+ const value = this.getValueByPath(context, trimmedPath);
308
+ return value !== undefined ? String(value) : match;
309
+ });
310
+ }
311
+ /**
312
+ * Get value from object by dot-notation path
313
+ */
314
+ getValueByPath(obj, path) {
315
+ const parts = path.split('.');
316
+ let current = obj;
317
+ for (const part of parts) {
318
+ if (current && typeof current === 'object' && part in current) {
319
+ current = current[part];
320
+ }
321
+ else {
322
+ return undefined;
323
+ }
324
+ }
325
+ return current;
326
+ }
327
+ /**
328
+ * Chunk array into smaller arrays
329
+ */
330
+ chunkArray(array, size) {
331
+ const chunks = [];
332
+ for (let i = 0; i < array.length; i += size) {
333
+ chunks.push(array.slice(i, i + size));
334
+ }
335
+ return chunks;
336
+ }
337
+ /**
338
+ * Get numeric parameter with default
339
+ */
340
+ getNumericParam(params, name, defaultValue) {
341
+ const value = this.getParamValue(params, name);
342
+ if (value === undefined || value === null)
343
+ return defaultValue;
344
+ const num = Number(value);
345
+ return isNaN(num) ? defaultValue : num;
346
+ }
347
+ /**
348
+ * Get boolean parameter with default
349
+ */
350
+ getBooleanParam(params, name, defaultValue) {
351
+ const value = this.getParamValue(params, name);
352
+ if (value === undefined || value === null)
353
+ return defaultValue;
354
+ if (typeof value === 'boolean')
355
+ return value;
356
+ if (typeof value === 'string') {
357
+ return value.toLowerCase() === 'true';
358
+ }
359
+ return defaultValue;
360
+ }
361
+ /**
362
+ * Get parameter value by name (case-insensitive)
363
+ */
364
+ getParamValue(params, name) {
365
+ const param = params.Params.find(p => p.Name.toLowerCase() === name.toLowerCase());
366
+ return param?.Value;
367
+ }
368
+ };
369
+ exports.LoopAction = LoopAction;
370
+ exports.LoopAction = LoopAction = __decorate([
371
+ (0, global_1.RegisterClass)(actions_1.BaseAction, "Loop")
372
+ ], LoopAction);
373
+ /**
374
+ * Loader function to ensure the LoopAction class is included in the bundle
375
+ */
376
+ function LoadLoopAction() {
377
+ // Stub function to prevent tree shaking
378
+ }
379
+ exports.LoadLoopAction = LoadLoopAction;
380
+ //# sourceMappingURL=loop.action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop.action.js","sourceRoot":"","sources":["../../../src/custom/workflow/loop.action.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ import { ActionResultSimple, RunActionParams } from "@memberjunction/actions-base";
2
+ import { BaseAction } from "@memberjunction/actions";
3
+ /**
4
+ * Action that executes multiple actions in parallel
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * // Execute multiple actions in parallel
9
+ * await runAction({
10
+ * ActionName: 'Parallel Execute',
11
+ * Params: [{
12
+ * Name: 'Actions',
13
+ * Value: [
14
+ * {
15
+ * ActionName: 'Web Search',
16
+ * Params: { Query: 'latest news' }
17
+ * },
18
+ * {
19
+ * ActionName: 'Get Weather',
20
+ * Params: { Location: 'New York' }
21
+ * },
22
+ * {
23
+ * ActionName: 'Get Stock Price',
24
+ * Params: { Symbol: 'AAPL' }
25
+ * }
26
+ * ]
27
+ * }]
28
+ * });
29
+ *
30
+ * // Wait for first result only
31
+ * await runAction({
32
+ * ActionName: 'Parallel Execute',
33
+ * Params: [{
34
+ * Name: 'Actions',
35
+ * Value: [api1Action, api2Action, api3Action]
36
+ * }, {
37
+ * Name: 'WaitForAll',
38
+ * Value: false
39
+ * }]
40
+ * });
41
+ *
42
+ * // With timeout and error handling
43
+ * await runAction({
44
+ * ActionName: 'Parallel Execute',
45
+ * Params: [{
46
+ * Name: 'Actions',
47
+ * Value: actions
48
+ * }, {
49
+ * Name: 'ContinueOnError',
50
+ * Value: true
51
+ * }, {
52
+ * Name: 'Timeout',
53
+ * Value: 10000
54
+ * }, {
55
+ * Name: 'MaxConcurrent',
56
+ * Value: 5
57
+ * }]
58
+ * });
59
+ * ```
60
+ */
61
+ export declare class ParallelExecuteAction extends BaseAction {
62
+ /**
63
+ * Executes multiple actions in parallel
64
+ *
65
+ * @param params - The action parameters containing:
66
+ * - Actions: Array of action configurations to execute (required)
67
+ * - WaitForAll: Boolean - wait for all vs first (default: true)
68
+ * - ContinueOnError: Boolean - continue if actions fail (default: false)
69
+ * - MaxConcurrent: Max parallel executions (default: unlimited)
70
+ * - Timeout: Overall timeout in milliseconds (optional)
71
+ * - IncludeContext: Additional context to pass to all actions (optional)
72
+ *
73
+ * @returns Array of results or first result based on WaitForAll
74
+ */
75
+ protected InternalRunAction(params: RunActionParams): Promise<ActionResultSimple>;
76
+ /**
77
+ * Execute all actions and wait for completion
78
+ */
79
+ private executeAllActions;
80
+ /**
81
+ * Execute actions and return first result
82
+ */
83
+ private executeFirstAction;
84
+ /**
85
+ * Prepare action configuration with context
86
+ */
87
+ private prepareActionConfig;
88
+ /**
89
+ * Get numeric parameter with default
90
+ */
91
+ private getNumericParam;
92
+ /**
93
+ * Get boolean parameter with default
94
+ */
95
+ private getBooleanParam;
96
+ /**
97
+ * Get parameter value by name (case-insensitive)
98
+ */
99
+ private getParamValue;
100
+ }
101
+ /**
102
+ * Loader function to ensure the ParallelExecuteAction class is included in the bundle
103
+ */
104
+ export declare function LoadParallelExecuteAction(): void;
105
+ //# sourceMappingURL=parallel-execute.action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parallel-execute.action.d.ts","sourceRoot":"","sources":["../../../src/custom/workflow/parallel-execute.action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEnF,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAIrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AACH,qBACa,qBAAsB,SAAQ,UAAU;IAEjD;;;;;;;;;;;;OAYG;cACa,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA+DvF;;OAEG;YACW,iBAAiB;IA8H/B;;OAEG;YACW,kBAAkB;IAuKhC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA8B3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,OAAO,CAAC,aAAa;CAIxB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,SAExC"}