@memberjunction/core-actions 2.53.0 → 2.55.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 +72 -0
  86. package/dist/custom/web/duckduckgo-rate-limiter.d.ts.map +1 -0
  87. package/dist/custom/web/duckduckgo-rate-limiter.js +175 -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,88 @@
1
+ import { ActionResultSimple, RunActionParams } from "@memberjunction/actions-base";
2
+ import { BaseAction } from "@memberjunction/actions";
3
+ /**
4
+ * Action that adds rate limiting to any API endpoint
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * // Rate limit API calls
9
+ * await runAction({
10
+ * ActionName: 'API Rate Limiter',
11
+ * Params: [{
12
+ * Name: 'URL',
13
+ * Value: 'https://api.example.com/data'
14
+ * }, {
15
+ * Name: 'Method',
16
+ * Value: 'GET'
17
+ * }, {
18
+ * Name: 'RateLimitKey',
19
+ * Value: 'example-api'
20
+ * }, {
21
+ * Name: 'MaxRequestsPerMinute',
22
+ * Value: 60
23
+ * }, {
24
+ * Name: 'MaxConcurrent',
25
+ * Value: 5
26
+ * }]
27
+ * });
28
+ *
29
+ * // With authentication and retry
30
+ * await runAction({
31
+ * ActionName: 'API Rate Limiter',
32
+ * Params: [{
33
+ * Name: 'URL',
34
+ * Value: 'https://api.example.com/users'
35
+ * }, {
36
+ * Name: 'Headers',
37
+ * Value: { 'Authorization': 'Bearer token' }
38
+ * }, {
39
+ * Name: 'RateLimitKey',
40
+ * Value: 'example-api'
41
+ * }, {
42
+ * Name: 'RetryOnRateLimit',
43
+ * Value: true
44
+ * }, {
45
+ * Name: 'BackoffMs',
46
+ * Value: 1000
47
+ * }]
48
+ * });
49
+ * ```
50
+ */
51
+ export declare class APIRateLimiterAction extends BaseAction {
52
+ /**
53
+ * Execute API request with rate limiting
54
+ *
55
+ * @param params - The action parameters containing:
56
+ * - URL: API endpoint URL (required)
57
+ * - Method: HTTP method (default: GET)
58
+ * - Headers: Request headers
59
+ * - Body: Request body
60
+ * - RateLimitKey: Unique key for rate limiter instance (required)
61
+ * - MaxRequestsPerMinute: Max requests per minute (default: 60)
62
+ * - MaxConcurrent: Max concurrent requests (default: 5)
63
+ * - RetryOnRateLimit: Retry on 429 errors (default: true)
64
+ * - BackoffMs: Initial backoff in ms (default: 1000)
65
+ * - MaxRetries: Max retry attempts (default: 3)
66
+ * - Timeout: Request timeout in ms (default: 30000)
67
+ *
68
+ * @returns API response with rate limit info
69
+ */
70
+ protected InternalRunAction(params: RunActionParams): Promise<ActionResultSimple>;
71
+ /**
72
+ * Get numeric parameter with default
73
+ */
74
+ private getNumericParam;
75
+ /**
76
+ * Get boolean parameter with default
77
+ */
78
+ private getBooleanParam;
79
+ /**
80
+ * Get parameter value by name (case-insensitive)
81
+ */
82
+ private getParamValue;
83
+ }
84
+ /**
85
+ * Loader function to ensure the APIRateLimiterAction class is included in the bundle
86
+ */
87
+ export declare function LoadAPIRateLimiterAction(): void;
88
+ //# sourceMappingURL=api-rate-limiter.action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-rate-limiter.action.d.ts","sourceRoot":"","sources":["../../../src/custom/integration/api-rate-limiter.action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEnF,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAuIrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,qBACa,oBAAqB,SAAQ,UAAU;IAEhD;;;;;;;;;;;;;;;;;OAiBG;cACa,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAyJvF;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,OAAO,CAAC,aAAa;CAIxB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,SAEvC"}
@@ -0,0 +1,363 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.LoadAPIRateLimiterAction = exports.APIRateLimiterAction = void 0;
13
+ const global_1 = require("@memberjunction/global");
14
+ const actions_1 = require("@memberjunction/actions");
15
+ const axios_1 = __importDefault(require("axios"));
16
+ const rxjs_1 = require("rxjs");
17
+ const operators_1 = require("rxjs/operators");
18
+ /**
19
+ * Rate limiter singleton for managing API requests across action instances
20
+ */
21
+ class APIRateLimiterManager {
22
+ static instance;
23
+ limiters = new Map();
24
+ static getInstance() {
25
+ if (!APIRateLimiterManager.instance) {
26
+ APIRateLimiterManager.instance = new APIRateLimiterManager();
27
+ }
28
+ return APIRateLimiterManager.instance;
29
+ }
30
+ getRateLimiter(key, config) {
31
+ if (!this.limiters.has(key)) {
32
+ this.limiters.set(key, new APIRateLimiter(config));
33
+ }
34
+ return this.limiters.get(key);
35
+ }
36
+ }
37
+ class APIRateLimiter {
38
+ config;
39
+ requestQueue$ = new rxjs_1.Subject();
40
+ requestCount = 0;
41
+ windowStart = Date.now();
42
+ activeRequests = 0;
43
+ constructor(config) {
44
+ this.config = config;
45
+ // Process queue with rate limiting
46
+ this.requestQueue$.pipe((0, operators_1.concatMap)(request => this.processRequest(request))).subscribe();
47
+ }
48
+ async execute(axiosConfig) {
49
+ return new Promise((resolve, reject) => {
50
+ this.requestQueue$.next({
51
+ config: axiosConfig,
52
+ resolve,
53
+ reject,
54
+ retryCount: 0
55
+ });
56
+ });
57
+ }
58
+ processRequest(request) {
59
+ return new rxjs_1.Observable(observer => {
60
+ const executeRequest = async () => {
61
+ // Check rate limit window
62
+ const now = Date.now();
63
+ const windowElapsed = now - this.windowStart;
64
+ if (windowElapsed >= 60000) {
65
+ // Reset window
66
+ this.requestCount = 0;
67
+ this.windowStart = now;
68
+ }
69
+ // Wait if we've hit rate limit
70
+ if (this.requestCount >= this.config.maxRequestsPerMinute) {
71
+ const waitTime = 60000 - windowElapsed;
72
+ await new Promise(resolve => setTimeout(resolve, waitTime));
73
+ // Reset after waiting
74
+ this.requestCount = 0;
75
+ this.windowStart = Date.now();
76
+ }
77
+ // Wait if at concurrent limit
78
+ while (this.activeRequests >= this.config.maxConcurrent) {
79
+ await new Promise(resolve => setTimeout(resolve, 100));
80
+ }
81
+ // Execute request
82
+ this.requestCount++;
83
+ this.activeRequests++;
84
+ try {
85
+ const response = await (0, axios_1.default)(request.config);
86
+ this.activeRequests--;
87
+ request.resolve(response);
88
+ observer.next();
89
+ observer.complete();
90
+ }
91
+ catch (error) {
92
+ this.activeRequests--;
93
+ // Check if rate limited
94
+ const isRateLimited = error.response?.status === 429 ||
95
+ error.response?.status === 503 ||
96
+ (error.response?.headers && error.response.headers['x-ratelimit-remaining'] === '0');
97
+ if (isRateLimited && this.config.retryOnRateLimit && request.retryCount < this.config.maxRetries) {
98
+ // Calculate backoff
99
+ const backoffTime = this.config.backoffMs * Math.pow(2, request.retryCount);
100
+ // Retry after backoff
101
+ setTimeout(() => {
102
+ request.retryCount++;
103
+ this.requestQueue$.next(request);
104
+ }, backoffTime);
105
+ observer.next();
106
+ observer.complete();
107
+ }
108
+ else {
109
+ request.reject(error);
110
+ observer.error(error);
111
+ }
112
+ }
113
+ };
114
+ executeRequest().catch(err => observer.error(err));
115
+ });
116
+ }
117
+ }
118
+ /**
119
+ * Action that adds rate limiting to any API endpoint
120
+ *
121
+ * @example
122
+ * ```typescript
123
+ * // Rate limit API calls
124
+ * await runAction({
125
+ * ActionName: 'API Rate Limiter',
126
+ * Params: [{
127
+ * Name: 'URL',
128
+ * Value: 'https://api.example.com/data'
129
+ * }, {
130
+ * Name: 'Method',
131
+ * Value: 'GET'
132
+ * }, {
133
+ * Name: 'RateLimitKey',
134
+ * Value: 'example-api'
135
+ * }, {
136
+ * Name: 'MaxRequestsPerMinute',
137
+ * Value: 60
138
+ * }, {
139
+ * Name: 'MaxConcurrent',
140
+ * Value: 5
141
+ * }]
142
+ * });
143
+ *
144
+ * // With authentication and retry
145
+ * await runAction({
146
+ * ActionName: 'API Rate Limiter',
147
+ * Params: [{
148
+ * Name: 'URL',
149
+ * Value: 'https://api.example.com/users'
150
+ * }, {
151
+ * Name: 'Headers',
152
+ * Value: { 'Authorization': 'Bearer token' }
153
+ * }, {
154
+ * Name: 'RateLimitKey',
155
+ * Value: 'example-api'
156
+ * }, {
157
+ * Name: 'RetryOnRateLimit',
158
+ * Value: true
159
+ * }, {
160
+ * Name: 'BackoffMs',
161
+ * Value: 1000
162
+ * }]
163
+ * });
164
+ * ```
165
+ */
166
+ let APIRateLimiterAction = class APIRateLimiterAction extends actions_1.BaseAction {
167
+ /**
168
+ * Execute API request with rate limiting
169
+ *
170
+ * @param params - The action parameters containing:
171
+ * - URL: API endpoint URL (required)
172
+ * - Method: HTTP method (default: GET)
173
+ * - Headers: Request headers
174
+ * - Body: Request body
175
+ * - RateLimitKey: Unique key for rate limiter instance (required)
176
+ * - MaxRequestsPerMinute: Max requests per minute (default: 60)
177
+ * - MaxConcurrent: Max concurrent requests (default: 5)
178
+ * - RetryOnRateLimit: Retry on 429 errors (default: true)
179
+ * - BackoffMs: Initial backoff in ms (default: 1000)
180
+ * - MaxRetries: Max retry attempts (default: 3)
181
+ * - Timeout: Request timeout in ms (default: 30000)
182
+ *
183
+ * @returns API response with rate limit info
184
+ */
185
+ async InternalRunAction(params) {
186
+ try {
187
+ const url = this.getParamValue(params, 'url');
188
+ const method = (this.getParamValue(params, 'method') || 'GET').toUpperCase();
189
+ const headers = this.getParamValue(params, 'headers') || {};
190
+ const body = this.getParamValue(params, 'body');
191
+ const rateLimitKey = this.getParamValue(params, 'ratelimitkey');
192
+ const maxRequestsPerMinute = this.getNumericParam(params, 'maxrequestsperminute', 60);
193
+ const maxConcurrent = this.getNumericParam(params, 'maxconcurrent', 5);
194
+ const retryOnRateLimit = this.getBooleanParam(params, 'retryonratelimit', true);
195
+ const backoffMs = this.getNumericParam(params, 'backoffms', 1000);
196
+ const maxRetries = this.getNumericParam(params, 'maxretries', 3);
197
+ const timeout = this.getNumericParam(params, 'timeout', 30000);
198
+ // Validate required parameters
199
+ if (!url) {
200
+ return {
201
+ Success: false,
202
+ Message: "URL parameter is required",
203
+ ResultCode: "MISSING_URL"
204
+ };
205
+ }
206
+ if (!rateLimitKey) {
207
+ return {
208
+ Success: false,
209
+ Message: "RateLimitKey parameter is required",
210
+ ResultCode: "MISSING_RATE_LIMIT_KEY"
211
+ };
212
+ }
213
+ // Validate rate limit config
214
+ if (maxRequestsPerMinute < 1) {
215
+ return {
216
+ Success: false,
217
+ Message: "MaxRequestsPerMinute must be at least 1",
218
+ ResultCode: "INVALID_RATE_LIMIT"
219
+ };
220
+ }
221
+ if (maxConcurrent < 1) {
222
+ return {
223
+ Success: false,
224
+ Message: "MaxConcurrent must be at least 1",
225
+ ResultCode: "INVALID_CONCURRENT_LIMIT"
226
+ };
227
+ }
228
+ // Get or create rate limiter
229
+ const rateLimiterManager = APIRateLimiterManager.getInstance();
230
+ const rateLimiter = rateLimiterManager.getRateLimiter(rateLimitKey, {
231
+ maxRequestsPerMinute,
232
+ maxConcurrent,
233
+ retryOnRateLimit,
234
+ backoffMs,
235
+ maxRetries
236
+ });
237
+ // Build request config
238
+ const config = {
239
+ url,
240
+ method: method,
241
+ headers,
242
+ timeout,
243
+ validateStatus: () => true // Handle all status codes
244
+ };
245
+ if (body && ['POST', 'PUT', 'PATCH'].includes(method)) {
246
+ config.data = body;
247
+ }
248
+ // Execute with rate limiting
249
+ const startTime = Date.now();
250
+ const response = await rateLimiter.execute(config);
251
+ const duration = Date.now() - startTime;
252
+ // Extract rate limit headers
253
+ const rateLimitHeaders = {};
254
+ const headerNames = [
255
+ 'x-ratelimit-limit',
256
+ 'x-ratelimit-remaining',
257
+ 'x-ratelimit-reset',
258
+ 'x-rate-limit-limit',
259
+ 'x-rate-limit-remaining',
260
+ 'x-rate-limit-reset',
261
+ 'ratelimit-limit',
262
+ 'ratelimit-remaining',
263
+ 'ratelimit-reset'
264
+ ];
265
+ for (const header of headerNames) {
266
+ if (response.headers[header]) {
267
+ rateLimitHeaders[header] = response.headers[header];
268
+ }
269
+ }
270
+ // Add output parameters
271
+ params.Params.push({
272
+ Name: 'ResponseStatus',
273
+ Type: 'Output',
274
+ Value: response.status
275
+ });
276
+ params.Params.push({
277
+ Name: 'ResponseHeaders',
278
+ Type: 'Output',
279
+ Value: response.headers
280
+ });
281
+ params.Params.push({
282
+ Name: 'ResponseData',
283
+ Type: 'Output',
284
+ Value: response.data
285
+ });
286
+ params.Params.push({
287
+ Name: 'RateLimitInfo',
288
+ Type: 'Output',
289
+ Value: rateLimitHeaders
290
+ });
291
+ params.Params.push({
292
+ Name: 'RequestDuration',
293
+ Type: 'Output',
294
+ Value: duration
295
+ });
296
+ // Check if request was successful
297
+ const isSuccess = response.status >= 200 && response.status < 300;
298
+ return {
299
+ Success: true,
300
+ ResultCode: isSuccess ? "SUCCESS" : `HTTP_${response.status}`,
301
+ Message: JSON.stringify({
302
+ message: "API request completed with rate limiting",
303
+ status: response.status,
304
+ statusText: response.statusText,
305
+ duration: duration,
306
+ rateLimitInfo: rateLimitHeaders,
307
+ rateLimitKey: rateLimitKey,
308
+ data: response.data
309
+ }, null, 2)
310
+ };
311
+ }
312
+ catch (error) {
313
+ return {
314
+ Success: false,
315
+ Message: `Rate limited API request failed: ${error instanceof Error ? error.message : String(error)}`,
316
+ ResultCode: "REQUEST_FAILED"
317
+ };
318
+ }
319
+ }
320
+ /**
321
+ * Get numeric parameter with default
322
+ */
323
+ getNumericParam(params, name, defaultValue) {
324
+ const value = this.getParamValue(params, name);
325
+ if (value === undefined || value === null)
326
+ return defaultValue;
327
+ const num = Number(value);
328
+ return isNaN(num) ? defaultValue : num;
329
+ }
330
+ /**
331
+ * Get boolean parameter with default
332
+ */
333
+ getBooleanParam(params, name, defaultValue) {
334
+ const value = this.getParamValue(params, name);
335
+ if (value === undefined || value === null)
336
+ return defaultValue;
337
+ if (typeof value === 'boolean')
338
+ return value;
339
+ if (typeof value === 'string') {
340
+ return value.toLowerCase() === 'true';
341
+ }
342
+ return defaultValue;
343
+ }
344
+ /**
345
+ * Get parameter value by name (case-insensitive)
346
+ */
347
+ getParamValue(params, name) {
348
+ const param = params.Params.find(p => p.Name.toLowerCase() === name.toLowerCase());
349
+ return param?.Value;
350
+ }
351
+ };
352
+ exports.APIRateLimiterAction = APIRateLimiterAction;
353
+ exports.APIRateLimiterAction = APIRateLimiterAction = __decorate([
354
+ (0, global_1.RegisterClass)(actions_1.BaseAction, "API Rate Limiter")
355
+ ], APIRateLimiterAction);
356
+ /**
357
+ * Loader function to ensure the APIRateLimiterAction class is included in the bundle
358
+ */
359
+ function LoadAPIRateLimiterAction() {
360
+ // Stub function to prevent tree shaking
361
+ }
362
+ exports.LoadAPIRateLimiterAction = LoadAPIRateLimiterAction;
363
+ //# sourceMappingURL=api-rate-limiter.action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-rate-limiter.action.js","sourceRoot":"","sources":["../../../src/custom/integration/api-rate-limiter.action.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ import { ActionResultSimple, RunActionParams } from "@memberjunction/actions-base";
2
+ import { BaseAction } from "@memberjunction/actions";
3
+ /**
4
+ * Action that executes GraphQL queries and mutations
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * // Simple query
9
+ * await runAction({
10
+ * ActionName: 'GraphQL Query',
11
+ * Params: [{
12
+ * Name: 'Endpoint',
13
+ * Value: 'https://api.example.com/graphql'
14
+ * }, {
15
+ * Name: 'Query',
16
+ * Value: `
17
+ * query GetUser($id: ID!) {
18
+ * user(id: $id) {
19
+ * id
20
+ * name
21
+ * email
22
+ * }
23
+ * }
24
+ * `
25
+ * }, {
26
+ * Name: 'Variables',
27
+ * Value: { id: '123' }
28
+ * }]
29
+ * });
30
+ *
31
+ * // Mutation with headers
32
+ * await runAction({
33
+ * ActionName: 'GraphQL Query',
34
+ * Params: [{
35
+ * Name: 'Endpoint',
36
+ * Value: 'https://api.example.com/graphql'
37
+ * }, {
38
+ * Name: 'Query',
39
+ * Value: `
40
+ * mutation CreateUser($input: CreateUserInput!) {
41
+ * createUser(input: $input) {
42
+ * id
43
+ * name
44
+ * }
45
+ * }
46
+ * `
47
+ * }, {
48
+ * Name: 'Variables',
49
+ * Value: {
50
+ * input: {
51
+ * name: 'John Doe',
52
+ * email: 'john@example.com'
53
+ * }
54
+ * }
55
+ * }, {
56
+ * Name: 'Headers',
57
+ * Value: {
58
+ * 'Authorization': 'Bearer token123'
59
+ * }
60
+ * }]
61
+ * });
62
+ * ```
63
+ */
64
+ export declare class GraphQLQueryAction extends BaseAction {
65
+ /**
66
+ * Executes a GraphQL query or mutation
67
+ *
68
+ * @param params - The action parameters containing:
69
+ * - Endpoint: GraphQL endpoint URL (required)
70
+ * - Query: GraphQL query/mutation string (required)
71
+ * - Variables: Variables object for the query (optional)
72
+ * - Headers: Additional headers for the request (optional)
73
+ * - OperationName: For multi-operation documents (optional)
74
+ * - Timeout: Request timeout in milliseconds - default: 30000
75
+ *
76
+ * @returns GraphQL response data
77
+ */
78
+ protected InternalRunAction(params: RunActionParams): Promise<ActionResultSimple>;
79
+ /**
80
+ * Get numeric parameter with default
81
+ */
82
+ private getNumericParam;
83
+ /**
84
+ * Get parameter value by name (case-insensitive)
85
+ */
86
+ private getParamValue;
87
+ }
88
+ /**
89
+ * Loader function to ensure the GraphQLQueryAction class is included in the bundle
90
+ */
91
+ export declare function LoadGraphQLQueryAction(): void;
92
+ //# sourceMappingURL=graphql-query.action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql-query.action.d.ts","sourceRoot":"","sources":["../../../src/custom/integration/graphql-query.action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEnF,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAIrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AACH,qBACa,kBAAmB,SAAQ,UAAU;IAE9C;;;;;;;;;;;;OAYG;cACa,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA8IvF;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACH,OAAO,CAAC,aAAa;CAIxB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,SAErC"}