@jam-nodes/nodes 0.2.4 → 0.2.6

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 (90) hide show
  1. package/dist/ai/analyze-posts.d.ts +4 -2
  2. package/dist/ai/analyze-posts.d.ts.map +1 -1
  3. package/dist/ai/analyze-posts.js +48 -44
  4. package/dist/ai/analyze-posts.js.map +1 -1
  5. package/dist/ai/draft-emails.d.ts +4 -2
  6. package/dist/ai/draft-emails.d.ts.map +1 -1
  7. package/dist/ai/draft-emails.js +57 -42
  8. package/dist/ai/draft-emails.js.map +1 -1
  9. package/dist/ai/keyword-generator.d.ts +1 -1
  10. package/dist/ai/keyword-generator.d.ts.map +1 -1
  11. package/dist/ai/keyword-generator.js +45 -20
  12. package/dist/ai/keyword-generator.js.map +1 -1
  13. package/dist/index.d.ts +113 -11
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +7 -2
  16. package/dist/index.js.map +1 -1
  17. package/dist/integrations/apollo/search-contacts.d.ts +8 -8
  18. package/dist/integrations/apollo/search-contacts.d.ts.map +1 -1
  19. package/dist/integrations/apollo/search-contacts.js +110 -26
  20. package/dist/integrations/apollo/search-contacts.js.map +1 -1
  21. package/dist/integrations/dataforseo/keyword-research.d.ts +1 -1
  22. package/dist/integrations/dataforseo/keyword-research.d.ts.map +1 -1
  23. package/dist/integrations/dataforseo/keyword-research.js +59 -9
  24. package/dist/integrations/dataforseo/keyword-research.js.map +1 -1
  25. package/dist/integrations/dataforseo/seo-audit.d.ts +1 -1
  26. package/dist/integrations/dataforseo/seo-audit.d.ts.map +1 -1
  27. package/dist/integrations/dataforseo/seo-audit.js +56 -24
  28. package/dist/integrations/dataforseo/seo-audit.js.map +1 -1
  29. package/dist/integrations/discord/create-thread.d.ts +13 -0
  30. package/dist/integrations/discord/create-thread.d.ts.map +1 -0
  31. package/dist/integrations/discord/create-thread.js +118 -0
  32. package/dist/integrations/discord/create-thread.js.map +1 -0
  33. package/dist/integrations/discord/credentials.d.ts +4 -0
  34. package/dist/integrations/discord/credentials.d.ts.map +1 -0
  35. package/dist/integrations/discord/credentials.js +26 -0
  36. package/dist/integrations/discord/credentials.js.map +1 -0
  37. package/dist/integrations/discord/index.d.ts +6 -0
  38. package/dist/integrations/discord/index.d.ts.map +1 -0
  39. package/dist/integrations/discord/index.js +6 -0
  40. package/dist/integrations/discord/index.js.map +1 -0
  41. package/dist/integrations/discord/schemas.d.ts +556 -0
  42. package/dist/integrations/discord/schemas.d.ts.map +1 -0
  43. package/dist/integrations/discord/schemas.js +77 -0
  44. package/dist/integrations/discord/schemas.js.map +1 -0
  45. package/dist/integrations/discord/send-message.d.ts +42 -0
  46. package/dist/integrations/discord/send-message.d.ts.map +1 -0
  47. package/dist/integrations/discord/send-message.js +79 -0
  48. package/dist/integrations/discord/send-message.js.map +1 -0
  49. package/dist/integrations/discord/send-webhook.d.ts +39 -0
  50. package/dist/integrations/discord/send-webhook.d.ts.map +1 -0
  51. package/dist/integrations/discord/send-webhook.js +77 -0
  52. package/dist/integrations/discord/send-webhook.js.map +1 -0
  53. package/dist/integrations/index.d.ts +1 -0
  54. package/dist/integrations/index.d.ts.map +1 -1
  55. package/dist/integrations/index.js +2 -0
  56. package/dist/integrations/index.js.map +1 -1
  57. package/dist/integrations/openai/sora-video.d.ts +4 -4
  58. package/dist/integrations/openai/sora-video.d.ts.map +1 -1
  59. package/dist/integrations/openai/sora-video.js +82 -7
  60. package/dist/integrations/openai/sora-video.js.map +1 -1
  61. package/dist/integrations/social/linkedin-monitor.d.ts +1 -1
  62. package/dist/integrations/social/linkedin-monitor.d.ts.map +1 -1
  63. package/dist/integrations/social/linkedin-monitor.js +69 -36
  64. package/dist/integrations/social/linkedin-monitor.js.map +1 -1
  65. package/dist/integrations/social/reddit-monitor.d.ts.map +1 -1
  66. package/dist/integrations/social/reddit-monitor.js +5 -12
  67. package/dist/integrations/social/reddit-monitor.js.map +1 -1
  68. package/dist/integrations/social/twitter-monitor.d.ts +20 -3
  69. package/dist/integrations/social/twitter-monitor.d.ts.map +1 -1
  70. package/dist/integrations/social/twitter-monitor.js +44 -28
  71. package/dist/integrations/social/twitter-monitor.js.map +1 -1
  72. package/dist/transform/filter.d.ts.map +1 -1
  73. package/dist/transform/filter.js +1 -18
  74. package/dist/transform/filter.js.map +1 -1
  75. package/dist/transform/map.d.ts.map +1 -1
  76. package/dist/transform/map.js +1 -26
  77. package/dist/transform/map.js.map +1 -1
  78. package/dist/utils/http.d.ts +60 -0
  79. package/dist/utils/http.d.ts.map +1 -0
  80. package/dist/utils/http.js +129 -0
  81. package/dist/utils/http.js.map +1 -0
  82. package/dist/utils/index.d.ts +3 -0
  83. package/dist/utils/index.d.ts.map +1 -0
  84. package/dist/utils/index.js +3 -0
  85. package/dist/utils/index.js.map +1 -0
  86. package/dist/utils/resolve-path.d.ts +20 -0
  87. package/dist/utils/resolve-path.d.ts.map +1 -0
  88. package/dist/utils/resolve-path.js +58 -0
  89. package/dist/utils/resolve-path.js.map +1 -0
  90. package/package.json +4 -1
@@ -1,5 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  import { defineNode } from '@jam-nodes/core';
3
+ import { fetchWithRetry } from '../../utils/http.js';
3
4
  // =============================================================================
4
5
  // Schemas
5
6
  // =============================================================================
@@ -53,13 +54,14 @@ async function searchReddit(query, options = {}) {
53
54
  restrict_sr: 'off',
54
55
  });
55
56
  const url = `https://www.reddit.com/search.json?${params.toString()}`;
56
- const response = await fetch(url, {
57
+ const response = await fetchWithRetry(url, {
57
58
  headers: {
58
59
  'User-Agent': 'Mozilla/5.0 (compatible; JamNodes/1.0)',
59
60
  },
60
- });
61
+ }, { maxRetries: 3, backoffMs: 1000, timeoutMs: 30000 });
61
62
  if (!response.ok) {
62
- throw new Error(`Reddit API error: ${response.status} ${response.statusText}`);
63
+ const errorText = await response.text();
64
+ throw new Error(`Reddit API error: ${response.status} - ${errorText}`);
63
65
  }
64
66
  return response.json();
65
67
  }
@@ -133,15 +135,6 @@ export const redditMonitorNode = defineNode({
133
135
  }
134
136
  // Sort by recency
135
137
  allPosts.sort((a, b) => new Date(b.postedAt).getTime() - new Date(a.postedAt).getTime());
136
- // Optional: send notification if service available
137
- if (context.services?.notifications && allPosts.length > 0) {
138
- await context.services.notifications.send({
139
- userId: context.userId,
140
- title: 'Reddit Monitor Complete',
141
- message: `Found ${allPosts.length} Reddit posts`,
142
- data: { posts: allPosts.slice(0, 5) },
143
- });
144
- }
145
138
  return {
146
139
  success: true,
147
140
  output: {
@@ -1 +1 @@
1
- {"version":3,"file":"reddit-monitor.js","sourceRoot":"","sources":["../../../src/integrations/social/reddit-monitor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reddit-monitor.js","sourceRoot":"","sources":["../../../src/integrations/social/reddit-monitor.ts"],"names":[],"mappings":"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"}
@@ -158,8 +158,8 @@ export type TwitterMonitorOutput = z.infer<typeof TwitterMonitorOutputSchema>;
158
158
  /**
159
159
  * Twitter Monitor Node
160
160
  *
161
- * Searches Twitter/X for posts matching keywords.
162
- * Requires `context.services.twitter` to be provided by the host application.
161
+ * Searches Twitter/X for posts matching keywords using TwitterAPI.io.
162
+ * Requires `context.credentials.twitter.twitterApiIoKey` to be provided.
163
163
  *
164
164
  * @example
165
165
  * ```typescript
@@ -179,8 +179,25 @@ export declare const twitterMonitorNode: import("@jam-nodes/core").NodeDefinitio
179
179
  lang?: string | undefined;
180
180
  sinceDays?: number | undefined;
181
181
  }, {
182
- posts: TwitterPost[];
182
+ posts: {
183
+ url: string;
184
+ id: string;
185
+ platform: "twitter";
186
+ text: string;
187
+ authorName: string;
188
+ authorHandle: string;
189
+ authorUrl: string;
190
+ engagement: {
191
+ comments: number;
192
+ likes: number;
193
+ shares: number;
194
+ views: number;
195
+ };
196
+ postedAt: string;
197
+ authorFollowers: number;
198
+ }[];
183
199
  totalFound: number;
184
200
  hasMore: boolean;
201
+ cursor?: string | undefined;
185
202
  }>;
186
203
  //# sourceMappingURL=twitter-monitor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"twitter-monitor.d.ts","sourceRoot":"","sources":["../../../src/integrations/social/twitter-monitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,SAAS,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC;CAClB;AAMD,eAAO,MAAM,yBAAyB;IACpC,6BAA6B;;IAE7B,oCAAoC;;IAEpC,2BAA2B;;IAE3B,gCAAgC;;IAEhC,mCAAmC;;IAEnC,qCAAqC;;;;;;;;;;;;;;;;EAErC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqBrC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAgD9E;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;EA6F7B,CAAC"}
1
+ {"version":3,"file":"twitter-monitor.d.ts","sourceRoot":"","sources":["../../../src/integrations/social/twitter-monitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAqDxB;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,SAAS,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC;CAClB;AAMD,eAAO,MAAM,yBAAyB;IACpC,6BAA6B;;IAE7B,oCAAoC;;IAEpC,2BAA2B;;IAE3B,gCAAgC;;IAEhC,mCAAmC;;IAEnC,qCAAqC;;;;;;;;;;;;;;;;EAErC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqBrC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AA+E9E;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoF7B,CAAC"}
@@ -1,5 +1,10 @@
1
1
  import { z } from 'zod';
2
2
  import { defineNode } from '@jam-nodes/core';
3
+ import { fetchWithRetry } from '../../utils/http.js';
4
+ // =============================================================================
5
+ // Constants
6
+ // =============================================================================
7
+ const TWITTERAPI_BASE_URL = 'https://api.twitterapi.io';
3
8
  // =============================================================================
4
9
  // Schemas
5
10
  // =============================================================================
@@ -65,14 +70,33 @@ function buildTwitterSearchQuery(keywords, options = {}) {
65
70
  }
66
71
  return query;
67
72
  }
73
+ /**
74
+ * Search Twitter using TwitterAPI.io
75
+ */
76
+ async function searchTwitter(apiKey, query, queryType = 'Latest') {
77
+ const url = new URL(`${TWITTERAPI_BASE_URL}/twitter/tweet/advanced_search`);
78
+ url.searchParams.set('query', query);
79
+ url.searchParams.set('queryType', queryType);
80
+ const response = await fetchWithRetry(url.toString(), {
81
+ method: 'GET',
82
+ headers: {
83
+ 'X-API-Key': apiKey,
84
+ },
85
+ }, { maxRetries: 3, backoffMs: 1000, timeoutMs: 30000 });
86
+ if (!response.ok) {
87
+ const errorText = await response.text();
88
+ throw new Error(`Twitter API error: ${response.status} - ${errorText}`);
89
+ }
90
+ return response.json();
91
+ }
68
92
  // =============================================================================
69
93
  // Node Definition
70
94
  // =============================================================================
71
95
  /**
72
96
  * Twitter Monitor Node
73
97
  *
74
- * Searches Twitter/X for posts matching keywords.
75
- * Requires `context.services.twitter` to be provided by the host application.
98
+ * Searches Twitter/X for posts matching keywords using TwitterAPI.io.
99
+ * Requires `context.credentials.twitter.twitterApiIoKey` to be provided.
76
100
  *
77
101
  * @example
78
102
  * ```typescript
@@ -103,11 +127,12 @@ export const twitterMonitorNode = defineNode({
103
127
  error: 'No keywords provided for Twitter search',
104
128
  };
105
129
  }
106
- // Require Twitter service
107
- if (!context.services?.twitter) {
130
+ // Check for API key (prefer TwitterAPI.io key)
131
+ const apiKey = context.credentials?.twitter?.twitterApiIoKey;
132
+ if (!apiKey) {
108
133
  return {
109
134
  success: false,
110
- error: 'Twitter service not configured. Please provide context.services.twitter.',
135
+ error: 'Twitter API key not configured. Please provide context.credentials.twitter.twitterApiIoKey.',
111
136
  };
112
137
  }
113
138
  // Build the search query
@@ -123,43 +148,34 @@ export const twitterMonitorNode = defineNode({
123
148
  lang: input.lang,
124
149
  });
125
150
  // Search tweets
126
- const tweets = await context.services.twitter.searchTweets(query, {
127
- maxResults: input.maxResults || 50,
128
- sinceDays: input.sinceDays,
129
- });
151
+ const response = await searchTwitter(apiKey, query, 'Latest');
130
152
  // Transform to unified format
131
- const posts = tweets.map((tweet) => ({
153
+ const posts = (response.tweets || [])
154
+ .slice(0, input.maxResults || 50)
155
+ .map((tweet) => ({
132
156
  id: tweet.id,
133
157
  platform: 'twitter',
134
158
  url: tweet.url,
135
159
  text: tweet.text,
136
- authorName: tweet.authorName,
137
- authorHandle: tweet.authorHandle,
138
- authorUrl: `https://twitter.com/${tweet.authorHandle}`,
139
- authorFollowers: tweet.authorFollowers,
160
+ authorName: tweet.author.name,
161
+ authorHandle: tweet.author.userName,
162
+ authorUrl: `https://twitter.com/${tweet.author.userName}`,
163
+ authorFollowers: tweet.author.followers,
140
164
  engagement: {
141
- likes: tweet.likes,
142
- comments: tweet.replies,
143
- shares: tweet.retweets,
144
- views: tweet.views || 0,
165
+ likes: tweet.likeCount,
166
+ comments: tweet.replyCount,
167
+ shares: tweet.retweetCount,
168
+ views: tweet.viewCount || 0,
145
169
  },
146
170
  postedAt: tweet.createdAt,
147
171
  }));
148
- // Optional: send notification if service available
149
- if (context.services?.notifications && posts.length > 0) {
150
- await context.services.notifications.send({
151
- userId: context.userId,
152
- title: 'Twitter Monitor Complete',
153
- message: `Found ${posts.length} tweets`,
154
- data: { posts: posts.slice(0, 5) },
155
- });
156
- }
157
172
  return {
158
173
  success: true,
159
174
  output: {
160
175
  posts,
161
176
  totalFound: posts.length,
162
- hasMore: false, // Simplified - pagination handled by service
177
+ hasMore: response.has_next_page,
178
+ cursor: response.next_cursor || undefined,
163
179
  },
164
180
  };
165
181
  }
@@ -1 +1 @@
1
- {"version":3,"file":"twitter-monitor.js","sourceRoot":"","sources":["../../../src/integrations/social/twitter-monitor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"twitter-monitor.js","sourceRoot":"","sources":["../../../src/integrations/social/twitter-monitor.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../src/transform/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;GAEG;AACH,eAAO,MAAM,oBAAoB,sHAS/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;GAEG;AACH,eAAO,MAAM,iBAAiB;IAC5B,+BAA+B;;IAE/B,4CAA4C;;IAE5C,sBAAsB;;IAEtB,+BAA+B;;;;;;;;;;;;EAE/B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAI7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAkE9D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,UAAU;;;;;;;;;EAiCrB,CAAC"}
1
+ {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../src/transform/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;GAEG;AACH,eAAO,MAAM,oBAAoB,sHAS/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;GAEG;AACH,eAAO,MAAM,iBAAiB;IAC5B,+BAA+B;;IAE/B,4CAA4C;;IAE5C,sBAAsB;;IAEtB,+BAA+B;;;;;;;;;;;;EAE/B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAI7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AA4C9D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,UAAU;;;;;;;;;EAiCrB,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  import { defineNode } from '@jam-nodes/core';
3
+ import { resolvePath } from '../utils/resolve-path.js';
3
4
  /**
4
5
  * Filter operator schema
5
6
  */
@@ -34,24 +35,6 @@ export const FilterOutputSchema = z.object({
34
35
  count: z.number(),
35
36
  originalCount: z.number(),
36
37
  });
37
- /**
38
- * Resolve a nested path on an object
39
- */
40
- function resolvePath(obj, path) {
41
- // Empty path means use the item itself
42
- if (!path) {
43
- return obj;
44
- }
45
- const parts = path.split('.');
46
- let current = obj;
47
- for (const part of parts) {
48
- if (current === null || current === undefined) {
49
- return undefined;
50
- }
51
- current = current[part];
52
- }
53
- return current;
54
- }
55
38
  /**
56
39
  * Evaluate filter condition
57
40
  */
@@ -1 +1 @@
1
- {"version":3,"file":"filter.js","sourceRoot":"","sources":["../../src/transform/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC;IACzC,QAAQ;IACR,YAAY;IACZ,UAAU;IACV,cAAc;IACd,cAAc;IACd,WAAW;IACX,QAAQ;IACR,YAAY;CACb,CAAC,CAAC;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,+BAA+B;IAC/B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAC3B,4CAA4C;IAC5C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,sBAAsB;IACtB,QAAQ,EAAE,oBAAoB;IAC9B,+BAA+B;IAC/B,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;CAC1B,CAAC,CAAC;AAIH;;GAEG;AACH,SAAS,WAAW,CAAC,GAAY,EAAE,IAAY;IAC7C,uCAAuC;IACvC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,OAAO,GAAY,GAAG,CAAC;IAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC9C,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,GAAI,OAAmC,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CACrB,QAAwB,EACxB,MAAe,EACf,QAAiB;IAEjB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,MAAM,KAAK,QAAQ,CAAC;QAC7B,KAAK,YAAY;YACf,OAAO,MAAM,KAAK,QAAQ,CAAC;QAC7B,KAAK,UAAU;YACb,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC/D,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACnC,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACnC,CAAC;YACD,OAAO,KAAK,CAAC;QACf,KAAK,cAAc;YACjB,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC/D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACpC,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACpC,CAAC;YACD,OAAO,IAAI,CAAC;QACd,KAAK,cAAc;YACjB,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,GAAG,QAAQ,CAAC;QACzF,KAAK,WAAW;YACd,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,GAAG,QAAQ,CAAC;QACzF,KAAK,QAAQ;YACX,OAAO,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,CAAC;QACjD,KAAK,YAAY;YACf,OAAO,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,CAAC;QACjD;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;IACnC,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,+CAA+C;IAC5D,QAAQ,EAAE,WAAW;IACrB,WAAW,EAAE,iBAAiB;IAC9B,YAAY,EAAE,kBAAkB;IAChC,iBAAiB,EAAE,CAAC;IACpB,YAAY,EAAE;QACZ,aAAa,EAAE,IAAI;KACpB;IACD,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC1C,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC5C,OAAO,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAC5D,CAAC,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE;oBACN,OAAO;oBACP,KAAK,EAAE,OAAO,CAAC,MAAM;oBACrB,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM;iBAClC;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB;aAC1E,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"filter.js","sourceRoot":"","sources":["../../src/transform/filter.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/transform/map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;GAEG;AACH,eAAO,MAAM,cAAc;IACzB,kCAAkC;;IAElC,6DAA6D;;;;;;;;EAE7D,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;EAG1B,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AA8BxD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,OAAO;;;;;;EA6BlB,CAAC"}
1
+ {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/transform/map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;GAEG;AACH,eAAO,MAAM,cAAc;IACzB,kCAAkC;;IAElC,6DAA6D;;;;;;;;EAE7D,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;EAG1B,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,OAAO;;;;;;EA6BlB,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  import { defineNode } from '@jam-nodes/core';
3
+ import { resolvePath } from '../utils/resolve-path.js';
3
4
  /**
4
5
  * Input schema for map node
5
6
  */
@@ -16,32 +17,6 @@ export const MapOutputSchema = z.object({
16
17
  results: z.array(z.unknown()),
17
18
  count: z.number(),
18
19
  });
19
- /**
20
- * Resolve a nested path on an object
21
- */
22
- function resolvePath(obj, path) {
23
- const parts = path.split('.');
24
- let current = obj;
25
- for (const part of parts) {
26
- if (current === null || current === undefined) {
27
- return undefined;
28
- }
29
- // Handle array access like "[0]"
30
- const arrayMatch = part.match(/^\[(\d+)\]$/);
31
- if (arrayMatch) {
32
- if (Array.isArray(current)) {
33
- current = current[parseInt(arrayMatch[1], 10)];
34
- }
35
- else {
36
- return undefined;
37
- }
38
- }
39
- else {
40
- current = current[part];
41
- }
42
- }
43
- return current;
44
- }
45
20
  /**
46
21
  * Map node - extract a property from each item in an array.
47
22
  *
@@ -1 +1 @@
1
- {"version":3,"file":"map.js","sourceRoot":"","sources":["../../src/transform/map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,kCAAkC;IAClC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAC3B,6DAA6D;IAC7D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;CACjB,CAAC,CAAC;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;CAClB,CAAC,CAAC;AAIH;;GAEG;AACH,SAAS,WAAW,CAAC,GAAY,EAAE,IAAY;IAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,OAAO,GAAY,GAAG,CAAC;IAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC9C,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,iCAAiC;QACjC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC7C,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACN,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,GAAI,OAAmC,CAAC,IAAI,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,UAAU,CAAC;IAChC,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;IACX,WAAW,EAAE,+CAA+C;IAC5D,QAAQ,EAAE,WAAW;IACrB,WAAW,EAAE,cAAc;IAC3B,YAAY,EAAE,eAAe;IAC7B,iBAAiB,EAAE,CAAC;IACpB,YAAY,EAAE;QACZ,aAAa,EAAE,IAAI;KACpB;IACD,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAEzE,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE;oBACN,OAAO;oBACP,KAAK,EAAE,OAAO,CAAC,MAAM;iBACtB;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB;aACvE,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"map.js","sourceRoot":"","sources":["../../src/transform/map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,kCAAkC;IAClC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAC3B,6DAA6D;IAC7D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;CACjB,CAAC,CAAC;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;CAClB,CAAC,CAAC;AAIH;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,UAAU,CAAC;IAChC,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;IACX,WAAW,EAAE,+CAA+C;IAC5D,QAAQ,EAAE,WAAW;IACrB,WAAW,EAAE,cAAc;IAC3B,YAAY,EAAE,eAAe;IAC7B,iBAAiB,EAAE,CAAC;IACpB,YAAY,EAAE;QACZ,aAAa,EAAE,IAAI;KACpB;IACD,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAEzE,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE;oBACN,OAAO;oBACP,KAAK,EAAE,OAAO,CAAC,MAAM;iBACtB;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB;aACvE,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * HTTP utilities for making API calls with retry logic, timeouts, and rate limiting.
3
+ */
4
+ /**
5
+ * Sleep for a specified duration
6
+ */
7
+ export declare function sleep(ms: number): Promise<void>;
8
+ /**
9
+ * Configuration for fetch with retry
10
+ */
11
+ export interface FetchWithRetryOptions {
12
+ /** Maximum number of retry attempts (default: 3) */
13
+ maxRetries?: number;
14
+ /** Base delay in milliseconds for exponential backoff (default: 1000) */
15
+ backoffMs?: number;
16
+ /** Request timeout in milliseconds (default: 30000) */
17
+ timeoutMs?: number;
18
+ }
19
+ /**
20
+ * Error thrown when all retry attempts are exhausted
21
+ */
22
+ export declare class FetchRetryError extends Error {
23
+ readonly status?: number | undefined;
24
+ readonly body?: string | undefined;
25
+ constructor(message: string, status?: number | undefined, body?: string | undefined);
26
+ }
27
+ /**
28
+ * Fetch with automatic retry, timeout, and rate limit handling.
29
+ *
30
+ * Features:
31
+ * - Exponential backoff on rate limits (429) and server errors (5xx)
32
+ * - Configurable timeout
33
+ * - Respects Retry-After header
34
+ * - Does not retry on auth errors (401, 403) or client errors (4xx)
35
+ *
36
+ * @param url - URL to fetch
37
+ * @param options - Fetch options (same as native fetch)
38
+ * @param config - Retry and timeout configuration
39
+ * @returns Promise resolving to Response
40
+ * @throws FetchRetryError if all retries exhausted or non-retryable error
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * const response = await fetchWithRetry(
45
+ * 'https://api.example.com/data',
46
+ * {
47
+ * method: 'POST',
48
+ * headers: { 'Authorization': 'Bearer token' },
49
+ * body: JSON.stringify({ key: 'value' })
50
+ * },
51
+ * { maxRetries: 3, timeoutMs: 30000 }
52
+ * );
53
+ * ```
54
+ */
55
+ export declare function fetchWithRetry(url: string, options?: RequestInit, config?: FetchWithRetryOptions): Promise<Response>;
56
+ /**
57
+ * Parse JSON response with error handling
58
+ */
59
+ export declare function parseJsonResponse<T>(response: Response): Promise<T>;
60
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/utils/http.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;aAGtB,MAAM,CAAC,EAAE,MAAM;aACf,IAAI,CAAC,EAAE,MAAM;gBAF7B,OAAO,EAAE,MAAM,EACC,MAAM,CAAC,EAAE,MAAM,YAAA,EACf,IAAI,CAAC,EAAE,MAAM,YAAA;CAKhC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,WAAgB,EACzB,MAAM,GAAE,qBAA0B,GACjC,OAAO,CAAC,QAAQ,CAAC,CA4FnB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAWzE"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * HTTP utilities for making API calls with retry logic, timeouts, and rate limiting.
3
+ */
4
+ /**
5
+ * Sleep for a specified duration
6
+ */
7
+ export function sleep(ms) {
8
+ return new Promise((resolve) => setTimeout(resolve, ms));
9
+ }
10
+ /**
11
+ * Error thrown when all retry attempts are exhausted
12
+ */
13
+ export class FetchRetryError extends Error {
14
+ status;
15
+ body;
16
+ constructor(message, status, body) {
17
+ super(message);
18
+ this.status = status;
19
+ this.body = body;
20
+ this.name = 'FetchRetryError';
21
+ }
22
+ }
23
+ /**
24
+ * Fetch with automatic retry, timeout, and rate limit handling.
25
+ *
26
+ * Features:
27
+ * - Exponential backoff on rate limits (429) and server errors (5xx)
28
+ * - Configurable timeout
29
+ * - Respects Retry-After header
30
+ * - Does not retry on auth errors (401, 403) or client errors (4xx)
31
+ *
32
+ * @param url - URL to fetch
33
+ * @param options - Fetch options (same as native fetch)
34
+ * @param config - Retry and timeout configuration
35
+ * @returns Promise resolving to Response
36
+ * @throws FetchRetryError if all retries exhausted or non-retryable error
37
+ *
38
+ * @example
39
+ * ```typescript
40
+ * const response = await fetchWithRetry(
41
+ * 'https://api.example.com/data',
42
+ * {
43
+ * method: 'POST',
44
+ * headers: { 'Authorization': 'Bearer token' },
45
+ * body: JSON.stringify({ key: 'value' })
46
+ * },
47
+ * { maxRetries: 3, timeoutMs: 30000 }
48
+ * );
49
+ * ```
50
+ */
51
+ export async function fetchWithRetry(url, options = {}, config = {}) {
52
+ const { maxRetries = 3, backoffMs = 1000, timeoutMs = 30000 } = config;
53
+ let lastError = null;
54
+ for (let attempt = 0; attempt < maxRetries; attempt++) {
55
+ const controller = new AbortController();
56
+ const timeout = setTimeout(() => controller.abort(), timeoutMs);
57
+ try {
58
+ const response = await fetch(url, {
59
+ ...options,
60
+ signal: controller.signal,
61
+ });
62
+ clearTimeout(timeout);
63
+ // Don't retry on auth errors
64
+ if (response.status === 401 || response.status === 403) {
65
+ const errorText = await response.text();
66
+ throw new FetchRetryError(`Authentication error: ${response.status} ${response.statusText}`, response.status, errorText);
67
+ }
68
+ // Handle rate limiting
69
+ if (response.status === 429) {
70
+ const retryAfter = response.headers.get('retry-after');
71
+ const delayMs = retryAfter
72
+ ? parseInt(retryAfter, 10) * 1000
73
+ : backoffMs * Math.pow(2, attempt);
74
+ if (attempt < maxRetries - 1) {
75
+ await sleep(delayMs);
76
+ continue;
77
+ }
78
+ // All retries exhausted — throw instead of returning the 429 response
79
+ const errorText = await response.text();
80
+ throw new FetchRetryError(`Rate limit exceeded after ${maxRetries} attempts`, 429, errorText);
81
+ }
82
+ // Retry on server errors
83
+ if (response.status >= 500 && response.status < 600) {
84
+ if (attempt < maxRetries - 1) {
85
+ await sleep(backoffMs * Math.pow(2, attempt));
86
+ continue;
87
+ }
88
+ const errorText = await response.text();
89
+ throw new FetchRetryError(`Server error: ${response.status} ${response.statusText}`, response.status, errorText);
90
+ }
91
+ // Return response for success or client errors (let caller handle)
92
+ return response;
93
+ }
94
+ catch (error) {
95
+ clearTimeout(timeout);
96
+ // Don't retry abort errors (timeout) on last attempt
97
+ if (error instanceof Error && error.name === 'AbortError') {
98
+ lastError = new FetchRetryError('Request timed out');
99
+ if (attempt < maxRetries - 1) {
100
+ await sleep(backoffMs * Math.pow(2, attempt));
101
+ continue;
102
+ }
103
+ throw lastError;
104
+ }
105
+ // Re-throw FetchRetryError (auth errors, etc.)
106
+ if (error instanceof FetchRetryError) {
107
+ throw error;
108
+ }
109
+ // Network errors - retry
110
+ lastError = error instanceof Error ? error : new Error(String(error));
111
+ if (attempt < maxRetries - 1) {
112
+ await sleep(backoffMs * Math.pow(2, attempt));
113
+ continue;
114
+ }
115
+ }
116
+ }
117
+ throw lastError || new FetchRetryError('Max retries exceeded');
118
+ }
119
+ /**
120
+ * Parse JSON response with error handling
121
+ */
122
+ export async function parseJsonResponse(response) {
123
+ if (!response.ok) {
124
+ const errorText = await response.text();
125
+ throw new FetchRetryError(`HTTP error: ${response.status} ${response.statusText}`, response.status, errorText);
126
+ }
127
+ return response.json();
128
+ }
129
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/utils/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { fetchWithRetry, parseJsonResponse, sleep, FetchRetryError, type FetchWithRetryOptions, } from './http.js';
2
+ export { resolvePath } from './resolve-path.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,KAAK,EACL,eAAe,EACf,KAAK,qBAAqB,GAC3B,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { fetchWithRetry, parseJsonResponse, sleep, FetchRetryError, } from './http.js';
2
+ export { resolvePath } from './resolve-path.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,KAAK,EACL,eAAe,GAEhB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Shared path resolution utility for transform nodes.
3
+ *
4
+ * Resolves a dot-notation path string against an arbitrary object.
5
+ * This mirrors the same logic as `ExecutionContext.resolveNestedPath`,
6
+ * but operates on any object rather than the workflow variable store.
7
+ *
8
+ * Supported syntax:
9
+ * - Dot notation: "contact.email"
10
+ * - Keyed array access: "contacts[0].name"
11
+ * - Standalone array index: "[0].name" (when current value is an array)
12
+ * - Empty path returns the object itself
13
+ *
14
+ * @example
15
+ * resolvePath({ a: { b: [1, 2] } }, 'a.b[1]') // → 2
16
+ * resolvePath([{ id: 1 }, { id: 2 }], '[0].id') // → 1
17
+ * resolvePath({ score: 42 }, '') // → { score: 42 }
18
+ */
19
+ export declare function resolvePath(obj: unknown, path: string): unknown;
20
+ //# sourceMappingURL=resolve-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-path.d.ts","sourceRoot":"","sources":["../../src/utils/resolve-path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CA0C/D"}