@memberjunction/core-actions 2.49.0 → 2.51.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 (97) hide show
  1. package/dist/custom/{send-single-message.action.d.ts → communication/send-single-message.action.d.ts} +1 -0
  2. package/dist/custom/communication/send-single-message.action.d.ts.map +1 -0
  3. package/dist/custom/{send-single-message.action.js → communication/send-single-message.action.js} +8 -7
  4. package/dist/custom/communication/send-single-message.action.js.map +1 -0
  5. package/dist/custom/demo/calculate-expression.action.d.ts.map +1 -0
  6. package/dist/custom/{calculate-expression.action.js → demo/calculate-expression.action.js} +1 -1
  7. package/dist/custom/demo/calculate-expression.action.js.map +1 -0
  8. package/dist/custom/demo/color-converter.action.d.ts.map +1 -0
  9. package/dist/custom/{color-converter.action.js → demo/color-converter.action.js} +1 -1
  10. package/dist/custom/demo/color-converter.action.js.map +1 -0
  11. package/dist/custom/demo/get-stock-price.action.d.ts.map +1 -0
  12. package/dist/custom/{get-stock-price.action.js → demo/get-stock-price.action.js} +1 -1
  13. package/dist/custom/demo/get-stock-price.action.js.map +1 -0
  14. package/dist/custom/{get-weather.action.d.ts → demo/get-weather.action.d.ts} +9 -0
  15. package/dist/custom/demo/get-weather.action.d.ts.map +1 -0
  16. package/dist/custom/{get-weather.action.js → demo/get-weather.action.js} +104 -14
  17. package/dist/custom/demo/get-weather.action.js.map +1 -0
  18. package/dist/custom/demo/text-analyzer.action.d.ts.map +1 -0
  19. package/dist/custom/{text-analyzer.action.js → demo/text-analyzer.action.js} +2 -2
  20. package/dist/custom/demo/text-analyzer.action.js.map +1 -0
  21. package/dist/custom/demo/unit-converter.action.d.ts.map +1 -0
  22. package/dist/custom/{unit-converter.action.js → demo/unit-converter.action.js} +3 -3
  23. package/dist/custom/demo/unit-converter.action.js.map +1 -0
  24. package/dist/custom/utilities/business-days-calculator.action.d.ts.map +1 -0
  25. package/dist/custom/{business-days-calculator.action.js → utilities/business-days-calculator.action.js} +6 -6
  26. package/dist/custom/utilities/business-days-calculator.action.js.map +1 -0
  27. package/dist/custom/utilities/census-data-lookup.action.d.ts.map +1 -0
  28. package/dist/custom/{census-data-lookup.action.js → utilities/census-data-lookup.action.js} +4 -4
  29. package/dist/custom/utilities/census-data-lookup.action.js.map +1 -0
  30. package/dist/custom/{external-change-detection.action.d.ts → utilities/external-change-detection.action.d.ts} +1 -0
  31. package/dist/custom/utilities/external-change-detection.action.d.ts.map +1 -0
  32. package/dist/custom/{external-change-detection.action.js → utilities/external-change-detection.action.js} +3 -2
  33. package/dist/custom/utilities/external-change-detection.action.js.map +1 -0
  34. package/dist/custom/utilities/ip-geolocation.action.d.ts.map +1 -0
  35. package/dist/custom/{ip-geolocation.action.js → utilities/ip-geolocation.action.js} +1 -1
  36. package/dist/custom/utilities/ip-geolocation.action.js.map +1 -0
  37. package/dist/custom/utilities/qr-code.action.d.ts +89 -0
  38. package/dist/custom/utilities/qr-code.action.d.ts.map +1 -0
  39. package/dist/custom/utilities/qr-code.action.js +300 -0
  40. package/dist/custom/utilities/qr-code.action.js.map +1 -0
  41. package/dist/custom/utilities/vectorize-entity.action.d.ts.map +1 -0
  42. package/dist/custom/{vectorize-entity.action.js → utilities/vectorize-entity.action.js} +1 -1
  43. package/dist/custom/utilities/vectorize-entity.action.js.map +1 -0
  44. package/dist/custom/web/url-link-validator.action.d.ts +74 -0
  45. package/dist/custom/web/url-link-validator.action.d.ts.map +1 -0
  46. package/dist/custom/web/url-link-validator.action.js +286 -0
  47. package/dist/custom/web/url-link-validator.action.js.map +1 -0
  48. package/dist/custom/web/url-metadata-extractor.action.d.ts +104 -0
  49. package/dist/custom/web/url-metadata-extractor.action.d.ts.map +1 -0
  50. package/dist/custom/web/url-metadata-extractor.action.js +438 -0
  51. package/dist/custom/web/url-metadata-extractor.action.js.map +1 -0
  52. package/dist/custom/web/web-page-content.action.d.ts +90 -0
  53. package/dist/custom/web/web-page-content.action.d.ts.map +1 -0
  54. package/dist/custom/web/web-page-content.action.js +416 -0
  55. package/dist/custom/web/web-page-content.action.js.map +1 -0
  56. package/dist/custom/web/web-search.action.d.ts +69 -0
  57. package/dist/custom/web/web-search.action.d.ts.map +1 -0
  58. package/dist/custom/web/web-search.action.js +382 -0
  59. package/dist/custom/web/web-search.action.js.map +1 -0
  60. package/dist/index.d.ts +17 -11
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +58 -11
  63. package/dist/index.js.map +1 -1
  64. package/package.json +9 -9
  65. package/dist/custom/business-days-calculator.action.d.ts.map +0 -1
  66. package/dist/custom/business-days-calculator.action.js.map +0 -1
  67. package/dist/custom/calculate-expression.action.d.ts.map +0 -1
  68. package/dist/custom/calculate-expression.action.js.map +0 -1
  69. package/dist/custom/census-data-lookup.action.d.ts.map +0 -1
  70. package/dist/custom/census-data-lookup.action.js.map +0 -1
  71. package/dist/custom/color-converter.action.d.ts.map +0 -1
  72. package/dist/custom/color-converter.action.js.map +0 -1
  73. package/dist/custom/external-change-detection.action.d.ts.map +0 -1
  74. package/dist/custom/external-change-detection.action.js.map +0 -1
  75. package/dist/custom/get-stock-price.action.d.ts.map +0 -1
  76. package/dist/custom/get-stock-price.action.js.map +0 -1
  77. package/dist/custom/get-weather.action.d.ts.map +0 -1
  78. package/dist/custom/get-weather.action.js.map +0 -1
  79. package/dist/custom/ip-geolocation.action.d.ts.map +0 -1
  80. package/dist/custom/ip-geolocation.action.js.map +0 -1
  81. package/dist/custom/send-single-message.action.d.ts.map +0 -1
  82. package/dist/custom/send-single-message.action.js.map +0 -1
  83. package/dist/custom/text-analyzer.action.d.ts.map +0 -1
  84. package/dist/custom/text-analyzer.action.js.map +0 -1
  85. package/dist/custom/unit-converter.action.d.ts.map +0 -1
  86. package/dist/custom/unit-converter.action.js.map +0 -1
  87. package/dist/custom/vectorize-entity.action.d.ts.map +0 -1
  88. package/dist/custom/vectorize-entity.action.js.map +0 -1
  89. /package/dist/custom/{calculate-expression.action.d.ts → demo/calculate-expression.action.d.ts} +0 -0
  90. /package/dist/custom/{color-converter.action.d.ts → demo/color-converter.action.d.ts} +0 -0
  91. /package/dist/custom/{get-stock-price.action.d.ts → demo/get-stock-price.action.d.ts} +0 -0
  92. /package/dist/custom/{text-analyzer.action.d.ts → demo/text-analyzer.action.d.ts} +0 -0
  93. /package/dist/custom/{unit-converter.action.d.ts → demo/unit-converter.action.d.ts} +0 -0
  94. /package/dist/custom/{business-days-calculator.action.d.ts → utilities/business-days-calculator.action.d.ts} +0 -0
  95. /package/dist/custom/{census-data-lookup.action.d.ts → utilities/census-data-lookup.action.d.ts} +0 -0
  96. /package/dist/custom/{ip-geolocation.action.d.ts → utilities/ip-geolocation.action.d.ts} +0 -0
  97. /package/dist/custom/{vectorize-entity.action.d.ts → utilities/vectorize-entity.action.d.ts} +0 -0
@@ -0,0 +1,416 @@
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.LoadWebPageContentAction = exports.WebPageContentAction = void 0;
10
+ const actions_1 = require("@memberjunction/actions");
11
+ const global_1 = require("@memberjunction/global");
12
+ /**
13
+ * Action that retrieves and processes web page content with various output formats
14
+ * Supports text extraction, HTML parsing, and basic document conversion
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * // Get page content as text
19
+ * await runAction({
20
+ * ActionName: 'Web Page Content',
21
+ * Params: [{
22
+ * Name: 'URL',
23
+ * Value: 'https://example.com'
24
+ * }, {
25
+ * Name: 'ContentType',
26
+ * Value: 'text'
27
+ * }]
28
+ * });
29
+ *
30
+ * // Get main content only (removes navigation, ads, etc.)
31
+ * await runAction({
32
+ * ActionName: 'Web Page Content',
33
+ * Params: [{
34
+ * Name: 'URL',
35
+ * Value: 'https://news.example.com/article'
36
+ * }, {
37
+ * Name: 'ContentType',
38
+ * Value: 'markdown'
39
+ * }, {
40
+ * Name: 'ExtractMainContent',
41
+ * Value: true
42
+ * }]
43
+ * });
44
+ * ```
45
+ */
46
+ let WebPageContentAction = class WebPageContentAction extends actions_1.BaseAction {
47
+ MAX_CONTENT_SIZE = 5 * 1024 * 1024; // 5MB limit
48
+ MAX_IMAGE_SIZE = 2 * 1024 * 1024; // 2MB limit for images
49
+ /**
50
+ * Executes the web page content retrieval and processing
51
+ *
52
+ * @param params - The action parameters containing:
53
+ * - URL: Web page URL to fetch (required)
54
+ * - ContentType: Output format - 'text', 'html', 'markdown', 'json' (default: 'text')
55
+ * - ExtractMainContent: Extract only main content vs full page (default: false)
56
+ * - IncludeMetadata: Include page metadata in response (default: true)
57
+ * - MaxContentLength: Maximum content length to return (default: 50000 chars)
58
+ *
59
+ * @returns Processed web page content in the specified format
60
+ */
61
+ async InternalRunAction(params) {
62
+ try {
63
+ const urlParam = params.Params.find(p => p.Name.trim().toLowerCase() === 'url');
64
+ const contentTypeParam = params.Params.find(p => p.Name.trim().toLowerCase() === 'contenttype');
65
+ const extractMainParam = params.Params.find(p => p.Name.trim().toLowerCase() === 'extractmaincontent');
66
+ const includeMetadataParam = params.Params.find(p => p.Name.trim().toLowerCase() === 'includemetadata');
67
+ const maxLengthParam = params.Params.find(p => p.Name.trim().toLowerCase() === 'maxcontentlength');
68
+ if (!urlParam || !urlParam.Value) {
69
+ return {
70
+ Success: false,
71
+ Message: "URL parameter is required",
72
+ ResultCode: "MISSING_PARAMETERS"
73
+ };
74
+ }
75
+ const url = urlParam.Value.toString().trim();
76
+ const contentType = contentTypeParam?.Value?.toString().toLowerCase() || 'text';
77
+ const extractMain = extractMainParam?.Value === true || extractMainParam?.Value === 'true';
78
+ const includeMetadata = includeMetadataParam?.Value !== false && includeMetadataParam?.Value !== 'false';
79
+ const maxLength = parseInt(maxLengthParam?.Value?.toString() || '50000');
80
+ // Validate URL
81
+ let parsedUrl;
82
+ try {
83
+ parsedUrl = new URL(url);
84
+ if (!['http:', 'https:'].includes(parsedUrl.protocol)) {
85
+ throw new Error('Only HTTP and HTTPS URLs are supported');
86
+ }
87
+ }
88
+ catch (error) {
89
+ return {
90
+ Success: false,
91
+ Message: "Invalid URL format",
92
+ ResultCode: "INVALID_URL"
93
+ };
94
+ }
95
+ // Validate content type
96
+ if (!['text', 'html', 'markdown', 'json'].includes(contentType)) {
97
+ return {
98
+ Success: false,
99
+ Message: "ContentType must be one of: text, html, markdown, json",
100
+ ResultCode: "INVALID_CONTENT_TYPE"
101
+ };
102
+ }
103
+ // Fetch the web page
104
+ const response = await fetch(url, {
105
+ headers: {
106
+ 'User-Agent': 'Mozilla/5.0 (compatible; MemberJunction/1.0; +https://memberjunction.org)',
107
+ 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
108
+ 'Accept-Language': 'en-US,en;q=0.5',
109
+ 'Accept-Encoding': 'gzip, deflate'
110
+ },
111
+ redirect: 'follow'
112
+ });
113
+ if (!response.ok) {
114
+ return {
115
+ Success: false,
116
+ Message: `Failed to fetch URL: ${response.status} ${response.statusText}`,
117
+ ResultCode: "FETCH_FAILED"
118
+ };
119
+ }
120
+ // Check content type and size
121
+ const responseContentType = response.headers.get('content-type') || '';
122
+ const contentLength = parseInt(response.headers.get('content-length') || '0');
123
+ if (contentLength > this.MAX_CONTENT_SIZE) {
124
+ return {
125
+ Success: false,
126
+ Message: `Content too large: ${contentLength} bytes (max: ${this.MAX_CONTENT_SIZE})`,
127
+ ResultCode: "CONTENT_TOO_LARGE"
128
+ };
129
+ }
130
+ // Handle different content types
131
+ if (responseContentType.startsWith('image/')) {
132
+ if (contentLength > this.MAX_IMAGE_SIZE) {
133
+ return {
134
+ Success: false,
135
+ Message: `Image too large: ${contentLength} bytes (max: ${this.MAX_IMAGE_SIZE})`,
136
+ ResultCode: "IMAGE_TOO_LARGE"
137
+ };
138
+ }
139
+ // For images, return base64 encoded data
140
+ const buffer = await response.arrayBuffer();
141
+ const base64 = Buffer.from(buffer).toString('base64');
142
+ const result = {
143
+ url,
144
+ contentType: responseContentType,
145
+ contentLength,
146
+ isImage: true,
147
+ base64Data: base64,
148
+ dataUrl: `data:${responseContentType};base64,${base64}`
149
+ };
150
+ return {
151
+ Success: true,
152
+ ResultCode: "SUCCESS",
153
+ Message: JSON.stringify(result, null, 2)
154
+ };
155
+ }
156
+ // Handle text-based content
157
+ if (!responseContentType.includes('text/html') && !responseContentType.includes('application/xhtml') && !responseContentType.includes('text/')) {
158
+ return {
159
+ Success: false,
160
+ Message: `Unsupported content type: ${responseContentType}`,
161
+ ResultCode: "UNSUPPORTED_CONTENT_TYPE"
162
+ };
163
+ }
164
+ const html = await response.text();
165
+ if (html.length > this.MAX_CONTENT_SIZE) {
166
+ return {
167
+ Success: false,
168
+ Message: `Content too large: ${html.length} characters (max: ${this.MAX_CONTENT_SIZE})`,
169
+ ResultCode: "CONTENT_TOO_LARGE"
170
+ };
171
+ }
172
+ // Process the content based on requested format
173
+ const processedContent = await this.processContent(html, contentType, extractMain, includeMetadata, maxLength);
174
+ processedContent.url = url;
175
+ processedContent.fetchedAt = new Date().toISOString();
176
+ return {
177
+ Success: true,
178
+ ResultCode: "SUCCESS",
179
+ Message: JSON.stringify(processedContent, null, 2)
180
+ };
181
+ }
182
+ catch (error) {
183
+ return {
184
+ Success: false,
185
+ Message: `Failed to retrieve web page content: ${error instanceof Error ? error.message : String(error)}`,
186
+ ResultCode: "FAILED"
187
+ };
188
+ }
189
+ }
190
+ /**
191
+ * Processes HTML content into the requested format
192
+ */
193
+ async processContent(html, contentType, extractMain, includeMetadata, maxLength) {
194
+ const result = {
195
+ contentType,
196
+ extractMainContent: extractMain,
197
+ includeMetadata
198
+ };
199
+ // Extract metadata if requested
200
+ if (includeMetadata) {
201
+ result.metadata = this.extractMetadata(html);
202
+ }
203
+ // Extract main content or use full HTML
204
+ let contentHtml = html;
205
+ if (extractMain) {
206
+ contentHtml = this.extractMainContent(html);
207
+ }
208
+ // Convert based on content type
209
+ switch (contentType) {
210
+ case 'html':
211
+ result.content = this.truncateContent(contentHtml, maxLength);
212
+ break;
213
+ case 'text':
214
+ result.content = this.truncateContent(this.htmlToText(contentHtml), maxLength);
215
+ break;
216
+ case 'markdown':
217
+ result.content = this.truncateContent(this.htmlToMarkdown(contentHtml), maxLength);
218
+ break;
219
+ case 'json':
220
+ result.content = {
221
+ html: this.truncateContent(contentHtml, maxLength),
222
+ text: this.truncateContent(this.htmlToText(contentHtml), maxLength),
223
+ structure: this.extractStructure(contentHtml)
224
+ };
225
+ break;
226
+ }
227
+ result.contentLength = typeof result.content === 'string' ? result.content.length : JSON.stringify(result.content).length;
228
+ return result;
229
+ }
230
+ /**
231
+ * Extracts page metadata from HTML
232
+ */
233
+ extractMetadata(html) {
234
+ const metadata = {};
235
+ // Title
236
+ const titleMatch = html.match(/<title[^>]*>(.*?)<\/title>/is);
237
+ if (titleMatch) {
238
+ metadata.title = this.stripHtml(titleMatch[1]).trim();
239
+ }
240
+ // Meta tags
241
+ const metaRegex = /<meta[^>]+>/gi;
242
+ const metas = html.match(metaRegex) || [];
243
+ for (const meta of metas) {
244
+ const nameMatch = meta.match(/name=['"]([^'"]+)['"]/i);
245
+ const propertyMatch = meta.match(/property=['"]([^'"]+)['"]/i);
246
+ const contentMatch = meta.match(/content=['"]([^'"]*)['"]/i);
247
+ if (contentMatch) {
248
+ const content = contentMatch[1];
249
+ if (nameMatch) {
250
+ metadata[nameMatch[1]] = content;
251
+ }
252
+ else if (propertyMatch) {
253
+ metadata[propertyMatch[1]] = content;
254
+ }
255
+ }
256
+ }
257
+ // Canonical URL
258
+ const canonicalMatch = html.match(/<link[^>]+rel=['"]canonical['"][^>]+href=['"]([^'"]+)['"]/i);
259
+ if (canonicalMatch) {
260
+ metadata.canonical = canonicalMatch[1];
261
+ }
262
+ return metadata;
263
+ }
264
+ /**
265
+ * Attempts to extract main content from HTML (removes navigation, ads, etc.)
266
+ */
267
+ extractMainContent(html) {
268
+ // Remove scripts and styles
269
+ let content = html.replace(/<script[^>]*>[\s\S]*?<\/script>/gi, '');
270
+ content = content.replace(/<style[^>]*>[\s\S]*?<\/style>/gi, '');
271
+ // Try to find main content containers
272
+ const mainSelectors = [
273
+ /<main[^>]*>([\s\S]*?)<\/main>/i,
274
+ /<article[^>]*>([\s\S]*?)<\/article>/i,
275
+ /<div[^>]*class=['"][^'"]*content[^'"]*['"][^>]*>([\s\S]*?)<\/div>/i,
276
+ /<div[^>]*id=['"][^'"]*content[^'"]*['"][^>]*>([\s\S]*?)<\/div>/i,
277
+ /<div[^>]*class=['"][^'"]*post[^'"]*['"][^>]*>([\s\S]*?)<\/div>/i
278
+ ];
279
+ for (const selector of mainSelectors) {
280
+ const match = content.match(selector);
281
+ if (match && match[1].trim().length > 100) {
282
+ return match[1];
283
+ }
284
+ }
285
+ // If no main content found, remove common non-content elements
286
+ content = content.replace(/<nav[^>]*>[\s\S]*?<\/nav>/gi, '');
287
+ content = content.replace(/<header[^>]*>[\s\S]*?<\/header>/gi, '');
288
+ content = content.replace(/<footer[^>]*>[\s\S]*?<\/footer>/gi, '');
289
+ content = content.replace(/<aside[^>]*>[\s\S]*?<\/aside>/gi, '');
290
+ content = content.replace(/<div[^>]*class=['"][^'"]*nav[^'"]*['"][^>]*>[\s\S]*?<\/div>/gi, '');
291
+ return content;
292
+ }
293
+ /**
294
+ * Converts HTML to plain text
295
+ */
296
+ htmlToText(html) {
297
+ return html
298
+ .replace(/<script[^>]*>[\s\S]*?<\/script>/gi, '')
299
+ .replace(/<style[^>]*>[\s\S]*?<\/style>/gi, '')
300
+ .replace(/<br\s*\/?>/gi, '\n')
301
+ .replace(/<\/p>/gi, '\n\n')
302
+ .replace(/<\/h[1-6]>/gi, '\n\n')
303
+ .replace(/<\/div>/gi, '\n')
304
+ .replace(/<\/li>/gi, '\n')
305
+ .replace(/<[^>]*>/g, '')
306
+ .replace(/&amp;/g, '&')
307
+ .replace(/&lt;/g, '<')
308
+ .replace(/&gt;/g, '>')
309
+ .replace(/&quot;/g, '"')
310
+ .replace(/&#39;/g, "'")
311
+ .replace(/&nbsp;/g, ' ')
312
+ .replace(/\s+/g, ' ')
313
+ .replace(/\n\s+/g, '\n')
314
+ .replace(/\n{3,}/g, '\n\n')
315
+ .trim();
316
+ }
317
+ /**
318
+ * Converts HTML to basic Markdown
319
+ */
320
+ htmlToMarkdown(html) {
321
+ return html
322
+ .replace(/<script[^>]*>[\s\S]*?<\/script>/gi, '')
323
+ .replace(/<style[^>]*>[\s\S]*?<\/style>/gi, '')
324
+ .replace(/<h1[^>]*>(.*?)<\/h1>/gi, '# $1\n\n')
325
+ .replace(/<h2[^>]*>(.*?)<\/h2>/gi, '## $1\n\n')
326
+ .replace(/<h3[^>]*>(.*?)<\/h3>/gi, '### $1\n\n')
327
+ .replace(/<h4[^>]*>(.*?)<\/h4>/gi, '#### $1\n\n')
328
+ .replace(/<h5[^>]*>(.*?)<\/h5>/gi, '##### $1\n\n')
329
+ .replace(/<h6[^>]*>(.*?)<\/h6>/gi, '###### $1\n\n')
330
+ .replace(/<strong[^>]*>(.*?)<\/strong>/gi, '**$1**')
331
+ .replace(/<b[^>]*>(.*?)<\/b>/gi, '**$1**')
332
+ .replace(/<em[^>]*>(.*?)<\/em>/gi, '*$1*')
333
+ .replace(/<i[^>]*>(.*?)<\/i>/gi, '*$1*')
334
+ .replace(/<a[^>]+href=['"]([^'"]+)['"][^>]*>(.*?)<\/a>/gi, '[$2]($1)')
335
+ .replace(/<img[^>]+src=['"]([^'"]+)['"][^>]*alt=['"]([^'"]*)['"]/gi, '![$2]($1)')
336
+ .replace(/<img[^>]+src=['"]([^'"]+)['"][^>]*/gi, '![]($1)')
337
+ .replace(/<br\s*\/?>/gi, '\n')
338
+ .replace(/<\/p>/gi, '\n\n')
339
+ .replace(/<\/div>/gi, '\n')
340
+ .replace(/<li[^>]*>(.*?)<\/li>/gi, '- $1\n')
341
+ .replace(/<[^>]*>/g, '')
342
+ .replace(/&amp;/g, '&')
343
+ .replace(/&lt;/g, '<')
344
+ .replace(/&gt;/g, '>')
345
+ .replace(/&quot;/g, '"')
346
+ .replace(/&#39;/g, "'")
347
+ .replace(/&nbsp;/g, ' ')
348
+ .replace(/\s+/g, ' ')
349
+ .replace(/\n\s+/g, '\n')
350
+ .replace(/\n{3,}/g, '\n\n')
351
+ .trim();
352
+ }
353
+ /**
354
+ * Extracts basic document structure
355
+ */
356
+ extractStructure(html) {
357
+ const structure = {
358
+ headings: [],
359
+ links: [],
360
+ images: []
361
+ };
362
+ // Extract headings
363
+ const headingRegex = /<h([1-6])[^>]*>(.*?)<\/h[1-6]>/gi;
364
+ let match;
365
+ while ((match = headingRegex.exec(html)) !== null) {
366
+ structure.headings.push({
367
+ level: parseInt(match[1]),
368
+ text: this.stripHtml(match[2]).trim()
369
+ });
370
+ }
371
+ // Extract links
372
+ const linkRegex = /<a[^>]+href=['"]([^'"]+)['"][^>]*>(.*?)<\/a>/gi;
373
+ while ((match = linkRegex.exec(html)) !== null) {
374
+ structure.links.push({
375
+ url: match[1],
376
+ text: this.stripHtml(match[2]).trim()
377
+ });
378
+ }
379
+ // Extract images
380
+ const imgRegex = /<img[^>]+src=['"]([^'"]+)['"][^>]*(?:alt=['"]([^'"]*)['"]*)?/gi;
381
+ while ((match = imgRegex.exec(html)) !== null) {
382
+ structure.images.push({
383
+ src: match[1],
384
+ alt: match[2] || ''
385
+ });
386
+ }
387
+ return structure;
388
+ }
389
+ /**
390
+ * Strips HTML tags from text
391
+ */
392
+ stripHtml(html) {
393
+ return html.replace(/<[^>]*>/g, '');
394
+ }
395
+ /**
396
+ * Truncates content to specified length
397
+ */
398
+ truncateContent(content, maxLength) {
399
+ if (content.length <= maxLength) {
400
+ return content;
401
+ }
402
+ return content.substring(0, maxLength) + '...';
403
+ }
404
+ };
405
+ exports.WebPageContentAction = WebPageContentAction;
406
+ exports.WebPageContentAction = WebPageContentAction = __decorate([
407
+ (0, global_1.RegisterClass)(actions_1.BaseAction, "__WebPageContent")
408
+ ], WebPageContentAction);
409
+ /**
410
+ * Loader function to ensure the WebPageContentAction class is included in the bundle.
411
+ */
412
+ function LoadWebPageContentAction() {
413
+ // this function is a stub that is used to force the bundler to include the above class in the final bundle and not tree shake them out
414
+ }
415
+ exports.LoadWebPageContentAction = LoadWebPageContentAction;
416
+ //# sourceMappingURL=web-page-content.action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-page-content.action.js","sourceRoot":"","sources":["../../../src/custom/web/web-page-content.action.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ import { ActionResultSimple, RunActionParams } from "@memberjunction/actions-base";
2
+ import { BaseAction } from "@memberjunction/actions";
3
+ /**
4
+ * Action that performs web search using DuckDuckGo's Instant Answer API
5
+ * Returns search results with titles, URLs, and snippets
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * // Basic web search
10
+ * await runAction({
11
+ * ActionName: 'Web Search',
12
+ * Params: [{
13
+ * Name: 'SearchTerms',
14
+ * Value: 'TypeScript programming'
15
+ * }]
16
+ * });
17
+ *
18
+ * // Search with custom result count
19
+ * await runAction({
20
+ * ActionName: 'Web Search',
21
+ * Params: [{
22
+ * Name: 'SearchTerms',
23
+ * Value: 'machine learning tutorials'
24
+ * }, {
25
+ * Name: 'MaxResults',
26
+ * Value: 15
27
+ * }]
28
+ * });
29
+ * ```
30
+ */
31
+ export declare class WebSearchAction extends BaseAction {
32
+ /**
33
+ * Executes the web search using DuckDuckGo's API
34
+ *
35
+ * @param params - The action parameters containing:
36
+ * - SearchTerms: Keywords to search for (required)
37
+ * - MaxResults: Maximum number of results to return (default: 10, max: 30)
38
+ * - Region: Regional search preference (default: 'us-en')
39
+ * - SafeSearch: Safe search level - 'strict', 'moderate', 'off' (default: 'moderate')
40
+ *
41
+ * @returns Web search results with titles, URLs, and snippets
42
+ */
43
+ protected InternalRunAction(params: RunActionParams): Promise<ActionResultSimple>;
44
+ /**
45
+ * Parses DuckDuckGo Instant Answer API JSON response
46
+ */
47
+ private parseInstantResults;
48
+ /**
49
+ * Extracts domain from URL
50
+ */
51
+ private extractDomain;
52
+ /**
53
+ * Parses DuckDuckGo HTML search results
54
+ */
55
+ private parseSearchResults;
56
+ /**
57
+ * Decodes DuckDuckGo URL redirects
58
+ */
59
+ private decodeUrl;
60
+ /**
61
+ * Strips HTML tags and decodes entities
62
+ */
63
+ private stripHtml;
64
+ }
65
+ /**
66
+ * Loader function to ensure the WebSearchAction class is included in the bundle.
67
+ */
68
+ export declare function LoadWebSearchAction(): void;
69
+ //# sourceMappingURL=web-search.action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-search.action.d.ts","sourceRoot":"","sources":["../../../src/custom/web/web-search.action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGrD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBACa,eAAgB,SAAQ,UAAU;IAE3C;;;;;;;;;;OAUG;cACa,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA8IvF;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAkE3B;;OAEG;IACH,OAAO,CAAC,aAAa;IAQrB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAiG1B;;OAEG;IACH,OAAO,CAAC,SAAS;IAcjB;;OAEG;IACH,OAAO,CAAC,SAAS;CAYpB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,SAElC"}