@memberjunction/core-actions 2.50.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,438 @@
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.LoadURLMetadataExtractorAction = exports.URLMetadataExtractorAction = void 0;
10
+ const actions_1 = require("@memberjunction/actions");
11
+ const global_1 = require("@memberjunction/global");
12
+ /**
13
+ * Action that extracts comprehensive metadata from web pages including OpenGraph, Twitter Cards,
14
+ * Schema.org structured data, and standard HTML meta tags
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * // Extract all metadata from a webpage
19
+ * await runAction({
20
+ * ActionName: 'URL Metadata Extractor',
21
+ * Params: [{
22
+ * Name: 'URL',
23
+ * Value: 'https://example.com/article'
24
+ * }]
25
+ * });
26
+ *
27
+ * // Extract specific metadata types
28
+ * await runAction({
29
+ * ActionName: 'URL Metadata Extractor',
30
+ * Params: [{
31
+ * Name: 'URL',
32
+ * Value: 'https://news.site.com/story'
33
+ * }, {
34
+ * Name: 'IncludeOpenGraph',
35
+ * Value: true
36
+ * }, {
37
+ * Name: 'IncludeSchemaOrg',
38
+ * Value: false
39
+ * }]
40
+ * });
41
+ * ```
42
+ */
43
+ let URLMetadataExtractorAction = class URLMetadataExtractorAction extends actions_1.BaseAction {
44
+ TIMEOUT = 10000; // 10 seconds
45
+ MAX_CONTENT_SIZE = 2 * 1024 * 1024; // 2MB limit
46
+ /**
47
+ * Executes metadata extraction from the specified URL
48
+ *
49
+ * @param params - The action parameters containing:
50
+ * - URL: Web page URL to extract metadata from (required)
51
+ * - IncludeOpenGraph: Extract OpenGraph metadata (default: true)
52
+ * - IncludeTwitterCards: Extract Twitter Card metadata (default: true)
53
+ * - IncludeSchemaOrg: Extract Schema.org JSON-LD data (default: true)
54
+ * - IncludeBasicMeta: Extract standard HTML meta tags (default: true)
55
+ * - IncludeFavicon: Extract favicon information (default: true)
56
+ *
57
+ * @returns Comprehensive metadata extracted from the webpage
58
+ */
59
+ async InternalRunAction(params) {
60
+ try {
61
+ const urlParam = params.Params.find(p => p.Name.trim().toLowerCase() === 'url');
62
+ const includeOGParam = params.Params.find(p => p.Name.trim().toLowerCase() === 'includeopengraph');
63
+ const includeTwitterParam = params.Params.find(p => p.Name.trim().toLowerCase() === 'includetwittercards');
64
+ const includeSchemaParam = params.Params.find(p => p.Name.trim().toLowerCase() === 'includeschemaorg');
65
+ const includeBasicParam = params.Params.find(p => p.Name.trim().toLowerCase() === 'includebasicmeta');
66
+ const includeFaviconParam = params.Params.find(p => p.Name.trim().toLowerCase() === 'includefavicon');
67
+ if (!urlParam || !urlParam.Value) {
68
+ return {
69
+ Success: false,
70
+ Message: "URL parameter is required",
71
+ ResultCode: "MISSING_PARAMETERS"
72
+ };
73
+ }
74
+ const url = urlParam.Value.toString().trim();
75
+ const includeOpenGraph = includeOGParam?.Value !== false && includeOGParam?.Value !== 'false';
76
+ const includeTwitterCards = includeTwitterParam?.Value !== false && includeTwitterParam?.Value !== 'false';
77
+ const includeSchemaOrg = includeSchemaParam?.Value !== false && includeSchemaParam?.Value !== 'false';
78
+ const includeBasicMeta = includeBasicParam?.Value !== false && includeBasicParam?.Value !== 'false';
79
+ const includeFavicon = includeFaviconParam?.Value !== false && includeFaviconParam?.Value !== 'false';
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
+ // Fetch the webpage
96
+ const controller = new AbortController();
97
+ const timeoutId = setTimeout(() => controller.abort(), this.TIMEOUT);
98
+ try {
99
+ const response = await fetch(url, {
100
+ headers: {
101
+ 'User-Agent': 'Mozilla/5.0 (compatible; MemberJunction Metadata Extractor/1.0; +https://memberjunction.org)',
102
+ 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
103
+ 'Accept-Language': 'en-US,en;q=0.5'
104
+ },
105
+ signal: controller.signal
106
+ });
107
+ clearTimeout(timeoutId);
108
+ if (!response.ok) {
109
+ return {
110
+ Success: false,
111
+ Message: `Failed to fetch URL: ${response.status} ${response.statusText}`,
112
+ ResultCode: "FETCH_FAILED"
113
+ };
114
+ }
115
+ const contentType = response.headers.get('content-type') || '';
116
+ if (!contentType.includes('text/html') && !contentType.includes('application/xhtml')) {
117
+ return {
118
+ Success: false,
119
+ Message: `URL does not return HTML content: ${contentType}`,
120
+ ResultCode: "NOT_HTML"
121
+ };
122
+ }
123
+ const html = await response.text();
124
+ if (html.length > this.MAX_CONTENT_SIZE) {
125
+ return {
126
+ Success: false,
127
+ Message: `Content too large: ${html.length} characters (max: ${this.MAX_CONTENT_SIZE})`,
128
+ ResultCode: "CONTENT_TOO_LARGE"
129
+ };
130
+ }
131
+ // Extract metadata
132
+ const metadata = await this.extractAllMetadata(html, parsedUrl, includeOpenGraph, includeTwitterCards, includeSchemaOrg, includeBasicMeta, includeFavicon);
133
+ const result = {
134
+ url,
135
+ extractedAt: new Date().toISOString(),
136
+ options: {
137
+ includeOpenGraph,
138
+ includeTwitterCards,
139
+ includeSchemaOrg,
140
+ includeBasicMeta,
141
+ includeFavicon
142
+ },
143
+ metadata
144
+ };
145
+ return {
146
+ Success: true,
147
+ ResultCode: "SUCCESS",
148
+ Message: JSON.stringify(result, null, 2)
149
+ };
150
+ }
151
+ catch (fetchError) {
152
+ clearTimeout(timeoutId);
153
+ if (fetchError instanceof Error && fetchError.name === 'AbortError') {
154
+ return {
155
+ Success: false,
156
+ Message: `Request timed out after ${this.TIMEOUT}ms`,
157
+ ResultCode: "TIMEOUT"
158
+ };
159
+ }
160
+ throw fetchError;
161
+ }
162
+ }
163
+ catch (error) {
164
+ return {
165
+ Success: false,
166
+ Message: `Failed to extract metadata: ${error instanceof Error ? error.message : String(error)}`,
167
+ ResultCode: "FAILED"
168
+ };
169
+ }
170
+ }
171
+ /**
172
+ * Extracts all types of metadata from HTML content
173
+ */
174
+ async extractAllMetadata(html, baseUrl, includeOpenGraph, includeTwitterCards, includeSchemaOrg, includeBasicMeta, includeFavicon) {
175
+ const metadata = {};
176
+ if (includeBasicMeta) {
177
+ metadata.basic = this.extractBasicMetadata(html);
178
+ }
179
+ if (includeOpenGraph) {
180
+ metadata.openGraph = this.extractOpenGraphMetadata(html);
181
+ }
182
+ if (includeTwitterCards) {
183
+ metadata.twitterCards = this.extractTwitterCardMetadata(html);
184
+ }
185
+ if (includeSchemaOrg) {
186
+ metadata.schemaOrg = this.extractSchemaOrgMetadata(html);
187
+ }
188
+ if (includeFavicon) {
189
+ metadata.favicon = this.extractFaviconMetadata(html, baseUrl);
190
+ }
191
+ // Additional extracted data
192
+ metadata.links = this.extractLinks(html, baseUrl);
193
+ metadata.images = this.extractImages(html, baseUrl);
194
+ metadata.language = this.extractLanguage(html);
195
+ metadata.viewport = this.extractViewport(html);
196
+ return metadata;
197
+ }
198
+ /**
199
+ * Extracts basic HTML metadata
200
+ */
201
+ extractBasicMetadata(html) {
202
+ const basic = {};
203
+ // Title
204
+ const titleMatch = html.match(/<title[^>]*>(.*?)<\/title>/is);
205
+ if (titleMatch) {
206
+ basic.title = this.cleanText(titleMatch[1]);
207
+ }
208
+ // Meta tags
209
+ const metaRegex = /<meta[^>]+>/gi;
210
+ const metas = html.match(metaRegex) || [];
211
+ for (const meta of metas) {
212
+ const nameMatch = meta.match(/name=['"]([^'"]+)['"]/i);
213
+ const contentMatch = meta.match(/content=['"]([^'"]*)['"]/i);
214
+ if (nameMatch && contentMatch) {
215
+ const name = nameMatch[1].toLowerCase();
216
+ const content = contentMatch[1];
217
+ switch (name) {
218
+ case 'description':
219
+ basic.description = content;
220
+ break;
221
+ case 'keywords':
222
+ basic.keywords = content.split(',').map(k => k.trim());
223
+ break;
224
+ case 'author':
225
+ basic.author = content;
226
+ break;
227
+ case 'robots':
228
+ basic.robots = content;
229
+ break;
230
+ case 'copyright':
231
+ basic.copyright = content;
232
+ break;
233
+ default:
234
+ if (!basic.other)
235
+ basic.other = {};
236
+ basic.other[name] = content;
237
+ }
238
+ }
239
+ }
240
+ return basic;
241
+ }
242
+ /**
243
+ * Extracts OpenGraph metadata
244
+ */
245
+ extractOpenGraphMetadata(html) {
246
+ const og = {};
247
+ const ogRegex = /<meta[^>]+property=['"]og:([^'"]+)['"][^>]+content=['"]([^'"]*)['"]/gi;
248
+ let match;
249
+ while ((match = ogRegex.exec(html)) !== null) {
250
+ const property = match[1];
251
+ const content = match[2];
252
+ // Handle nested properties (e.g., og:image:width)
253
+ if (property.includes(':')) {
254
+ const parts = property.split(':');
255
+ let current = og;
256
+ for (let i = 0; i < parts.length - 1; i++) {
257
+ if (!current[parts[i]])
258
+ current[parts[i]] = {};
259
+ current = current[parts[i]];
260
+ }
261
+ current[parts[parts.length - 1]] = content;
262
+ }
263
+ else {
264
+ og[property] = content;
265
+ }
266
+ }
267
+ return og;
268
+ }
269
+ /**
270
+ * Extracts Twitter Card metadata
271
+ */
272
+ extractTwitterCardMetadata(html) {
273
+ const twitter = {};
274
+ const twitterRegex = /<meta[^>]+name=['"]twitter:([^'"]+)['"][^>]+content=['"]([^'"]*)['"]/gi;
275
+ let match;
276
+ while ((match = twitterRegex.exec(html)) !== null) {
277
+ const property = match[1];
278
+ const content = match[2];
279
+ twitter[property] = content;
280
+ }
281
+ return twitter;
282
+ }
283
+ /**
284
+ * Extracts Schema.org JSON-LD structured data
285
+ */
286
+ extractSchemaOrgMetadata(html) {
287
+ const schemas = [];
288
+ const scriptRegex = /<script[^>]*type=['"]application\/ld\+json['"][^>]*>(.*?)<\/script>/gis;
289
+ let match;
290
+ while ((match = scriptRegex.exec(html)) !== null) {
291
+ try {
292
+ const jsonData = JSON.parse(match[1]);
293
+ schemas.push(jsonData);
294
+ }
295
+ catch (error) {
296
+ // Invalid JSON, skip
297
+ }
298
+ }
299
+ return schemas;
300
+ }
301
+ /**
302
+ * Extracts favicon information
303
+ */
304
+ extractFaviconMetadata(html, baseUrl) {
305
+ const favicon = {};
306
+ const iconLinks = [];
307
+ // Look for various favicon link tags
308
+ const linkRegex = /<link[^>]+>/gi;
309
+ const links = html.match(linkRegex) || [];
310
+ for (const link of links) {
311
+ const relMatch = link.match(/rel=['"]([^'"]+)['"]/i);
312
+ const hrefMatch = link.match(/href=['"]([^'"]+)['"]/i);
313
+ const sizesMatch = link.match(/sizes=['"]([^'"]+)['"]/i);
314
+ if (relMatch && hrefMatch) {
315
+ const rel = relMatch[1].toLowerCase();
316
+ const href = hrefMatch[1];
317
+ if (rel.includes('icon') || rel.includes('shortcut')) {
318
+ iconLinks.push({
319
+ rel,
320
+ href: this.resolveUrl(href, baseUrl),
321
+ sizes: sizesMatch ? sizesMatch[1] : null
322
+ });
323
+ }
324
+ }
325
+ }
326
+ if (iconLinks.length > 0) {
327
+ favicon.icons = iconLinks;
328
+ // Default favicon if none specified
329
+ if (!iconLinks.some(icon => icon.href.includes('favicon.ico'))) {
330
+ favicon.defaultIcon = this.resolveUrl('/favicon.ico', baseUrl);
331
+ }
332
+ }
333
+ else {
334
+ favicon.defaultIcon = this.resolveUrl('/favicon.ico', baseUrl);
335
+ }
336
+ return favicon;
337
+ }
338
+ /**
339
+ * Extracts all links from the page
340
+ */
341
+ extractLinks(html, baseUrl) {
342
+ const links = [];
343
+ const linkRegex = /<a[^>]+href=['"]([^'"]+)['"][^>]*>(.*?)<\/a>/gi;
344
+ let match;
345
+ while ((match = linkRegex.exec(html)) !== null) {
346
+ const href = match[1];
347
+ const text = this.cleanText(match[2]);
348
+ if (href && !href.startsWith('mailto:') && !href.startsWith('tel:')) {
349
+ links.push({
350
+ href: this.resolveUrl(href, baseUrl),
351
+ text,
352
+ isExternal: !href.startsWith('/') && !href.includes(baseUrl.hostname)
353
+ });
354
+ }
355
+ }
356
+ return links.slice(0, 50); // Limit to first 50 links
357
+ }
358
+ /**
359
+ * Extracts image information
360
+ */
361
+ extractImages(html, baseUrl) {
362
+ const images = [];
363
+ const imgRegex = /<img[^>]+>/gi;
364
+ const imgs = html.match(imgRegex) || [];
365
+ for (const img of imgs) {
366
+ const srcMatch = img.match(/src=['"]([^'"]+)['"]/i);
367
+ const altMatch = img.match(/alt=['"]([^'"]*)['"]/i);
368
+ const titleMatch = img.match(/title=['"]([^'"]*)['"]/i);
369
+ if (srcMatch) {
370
+ images.push({
371
+ src: this.resolveUrl(srcMatch[1], baseUrl),
372
+ alt: altMatch ? altMatch[1] : '',
373
+ title: titleMatch ? titleMatch[1] : ''
374
+ });
375
+ }
376
+ }
377
+ return images.slice(0, 20); // Limit to first 20 images
378
+ }
379
+ /**
380
+ * Extracts language information
381
+ */
382
+ extractLanguage(html) {
383
+ const langMatch = html.match(/<html[^>]+lang=['"]([^'"]+)['"]/i);
384
+ if (langMatch) {
385
+ return langMatch[1];
386
+ }
387
+ const metaLangMatch = html.match(/<meta[^>]+http-equiv=['"]content-language['"][^>]+content=['"]([^'"]+)['"]/i);
388
+ if (metaLangMatch) {
389
+ return metaLangMatch[1];
390
+ }
391
+ return null;
392
+ }
393
+ /**
394
+ * Extracts viewport information
395
+ */
396
+ extractViewport(html) {
397
+ const viewportMatch = html.match(/<meta[^>]+name=['"]viewport['"][^>]+content=['"]([^'"]+)['"]/i);
398
+ return viewportMatch ? viewportMatch[1] : null;
399
+ }
400
+ /**
401
+ * Resolves relative URLs to absolute URLs
402
+ */
403
+ resolveUrl(url, baseUrl) {
404
+ try {
405
+ return new URL(url, baseUrl).toString();
406
+ }
407
+ catch {
408
+ return url;
409
+ }
410
+ }
411
+ /**
412
+ * Cleans and normalizes text content
413
+ */
414
+ cleanText(text) {
415
+ return text
416
+ .replace(/<[^>]*>/g, '') // Remove HTML tags
417
+ .replace(/&amp;/g, '&')
418
+ .replace(/&lt;/g, '<')
419
+ .replace(/&gt;/g, '>')
420
+ .replace(/&quot;/g, '"')
421
+ .replace(/&#39;/g, "'")
422
+ .replace(/&nbsp;/g, ' ')
423
+ .replace(/\s+/g, ' ')
424
+ .trim();
425
+ }
426
+ };
427
+ exports.URLMetadataExtractorAction = URLMetadataExtractorAction;
428
+ exports.URLMetadataExtractorAction = URLMetadataExtractorAction = __decorate([
429
+ (0, global_1.RegisterClass)(actions_1.BaseAction, "__URLMetadataExtractor")
430
+ ], URLMetadataExtractorAction);
431
+ /**
432
+ * Loader function to ensure the URLMetadataExtractorAction class is included in the bundle.
433
+ */
434
+ function LoadURLMetadataExtractorAction() {
435
+ // 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
436
+ }
437
+ exports.LoadURLMetadataExtractorAction = LoadURLMetadataExtractorAction;
438
+ //# sourceMappingURL=url-metadata-extractor.action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-metadata-extractor.action.js","sourceRoot":"","sources":["../../../src/custom/web/url-metadata-extractor.action.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ import { ActionResultSimple, RunActionParams } from "@memberjunction/actions-base";
2
+ import { BaseAction } from "@memberjunction/actions";
3
+ /**
4
+ * Action that retrieves and processes web page content with various output formats
5
+ * Supports text extraction, HTML parsing, and basic document conversion
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * // Get page content as text
10
+ * await runAction({
11
+ * ActionName: 'Web Page Content',
12
+ * Params: [{
13
+ * Name: 'URL',
14
+ * Value: 'https://example.com'
15
+ * }, {
16
+ * Name: 'ContentType',
17
+ * Value: 'text'
18
+ * }]
19
+ * });
20
+ *
21
+ * // Get main content only (removes navigation, ads, etc.)
22
+ * await runAction({
23
+ * ActionName: 'Web Page Content',
24
+ * Params: [{
25
+ * Name: 'URL',
26
+ * Value: 'https://news.example.com/article'
27
+ * }, {
28
+ * Name: 'ContentType',
29
+ * Value: 'markdown'
30
+ * }, {
31
+ * Name: 'ExtractMainContent',
32
+ * Value: true
33
+ * }]
34
+ * });
35
+ * ```
36
+ */
37
+ export declare class WebPageContentAction extends BaseAction {
38
+ private readonly MAX_CONTENT_SIZE;
39
+ private readonly MAX_IMAGE_SIZE;
40
+ /**
41
+ * Executes the web page content retrieval and processing
42
+ *
43
+ * @param params - The action parameters containing:
44
+ * - URL: Web page URL to fetch (required)
45
+ * - ContentType: Output format - 'text', 'html', 'markdown', 'json' (default: 'text')
46
+ * - ExtractMainContent: Extract only main content vs full page (default: false)
47
+ * - IncludeMetadata: Include page metadata in response (default: true)
48
+ * - MaxContentLength: Maximum content length to return (default: 50000 chars)
49
+ *
50
+ * @returns Processed web page content in the specified format
51
+ */
52
+ protected InternalRunAction(params: RunActionParams): Promise<ActionResultSimple>;
53
+ /**
54
+ * Processes HTML content into the requested format
55
+ */
56
+ private processContent;
57
+ /**
58
+ * Extracts page metadata from HTML
59
+ */
60
+ private extractMetadata;
61
+ /**
62
+ * Attempts to extract main content from HTML (removes navigation, ads, etc.)
63
+ */
64
+ private extractMainContent;
65
+ /**
66
+ * Converts HTML to plain text
67
+ */
68
+ private htmlToText;
69
+ /**
70
+ * Converts HTML to basic Markdown
71
+ */
72
+ private htmlToMarkdown;
73
+ /**
74
+ * Extracts basic document structure
75
+ */
76
+ private extractStructure;
77
+ /**
78
+ * Strips HTML tags from text
79
+ */
80
+ private stripHtml;
81
+ /**
82
+ * Truncates content to specified length
83
+ */
84
+ private truncateContent;
85
+ }
86
+ /**
87
+ * Loader function to ensure the WebPageContentAction class is included in the bundle.
88
+ */
89
+ export declare function LoadWebPageContentAction(): void;
90
+ //# sourceMappingURL=web-page-content.action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-page-content.action.d.ts","sourceRoot":"","sources":["../../../src/custom/web/web-page-content.action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,qBACa,oBAAqB,SAAQ,UAAU;IAEhD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IACpD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmB;IAElD;;;;;;;;;;;OAWG;cACa,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAkJvF;;OAEG;YACW,cAAc;IA2C5B;;OAEG;IACH,OAAO,CAAC,eAAe;IAqCvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA+B1B;;OAEG;IACH,OAAO,CAAC,UAAU;IAsBlB;;OAEG;IACH,OAAO,CAAC,cAAc;IAkCtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsCxB;;OAEG;IACH,OAAO,CAAC,SAAS;IAIjB;;OAEG;IACH,OAAO,CAAC,eAAe;CAM1B;AAED;;GAEG;AACH,wBAAgB,wBAAwB,SAEvC"}