@adobe/spacecat-shared-utils 1.109.0 → 1.111.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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ ## [@adobe/spacecat-shared-utils-v1.111.0](https://github.com/adobe/spacecat-shared/compare/@adobe/spacecat-shared-utils-v1.110.0...@adobe/spacecat-shared-utils-v1.111.0) (2026-04-01)
2
+
3
+ ### Features
4
+
5
+ * LLMO-3758 info-gain ([#1488](https://github.com/adobe/spacecat-shared/issues/1488)) ([cc6bcc1](https://github.com/adobe/spacecat-shared/commit/cc6bcc16921e98f46b79efdff272004672fb455e))
6
+
7
+ ## [@adobe/spacecat-shared-utils-v1.110.0](https://github.com/adobe/spacecat-shared/compare/@adobe/spacecat-shared-utils-v1.109.0...@adobe/spacecat-shared-utils-v1.110.0) (2026-04-01)
8
+
9
+ ### Features
10
+
11
+ * rename ahrefs to seo in dependency mapping and test fixtures ([#1492](https://github.com/adobe/spacecat-shared/issues/1492)) ([40aa319](https://github.com/adobe/spacecat-shared/commit/40aa319d78fc1aa8ba96f83002b45eb2dbde570c))
12
+
1
13
  ## [@adobe/spacecat-shared-utils-v1.109.0](https://github.com/adobe/spacecat-shared/compare/@adobe/spacecat-shared-utils-v1.108.0...@adobe/spacecat-shared-utils-v1.109.0) (2026-03-30)
2
14
 
3
15
  ### Features
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adobe/spacecat-shared-utils",
3
- "version": "1.109.0",
3
+ "version": "1.111.0",
4
4
  "description": "Shared modules of the Spacecat Services - utils",
5
5
  "type": "module",
6
6
  "exports": {
package/src/constants.js CHANGED
@@ -70,6 +70,7 @@ export const OPPORTUNITY_TYPES = /** @type {const} */ ({
70
70
  REDDIT_ANALYSIS: 'reddit-analysis',
71
71
  WIKIPEDIA_ANALYSIS: 'wikipedia-analysis',
72
72
  YOUTUBE_ANALYSIS: 'youtube-analysis',
73
+ INFO_GAIN: 'info-gain',
73
74
  });
74
75
 
75
76
  export const DEFAULT_CPC_VALUE = 1.5;
@@ -79,6 +79,9 @@ export const AUDIT_OPPORTUNITY_MAP = {
79
79
  'wikipedia-analysis': ['wikipedia-analysis'],
80
80
  'reddit-analysis': ['reddit-analysis'],
81
81
  'youtube-analysis': ['youtube-analysis'],
82
+
83
+ // LLMO customer / GEO content catalog
84
+ 'llmo-customer-analysis': ['info-gain'],
82
85
  };
83
86
 
84
87
  // ─── Query helpers ───────────────────────────────────────────────────────────
@@ -13,7 +13,7 @@
13
13
  /**
14
14
  * Dependency sources used by opportunities.
15
15
  * RUM — Real User Monitoring (Adobe RUM / helix-rum-js)
16
- * AHREFSImport Ahrefs import job (organic traffic, backlinks, keywords)
16
+ * SEOImport SEO import job (organic traffic, backlinks, keywords)
17
17
  * GSC — Google Search Console import
18
18
  * scraping — Page HTML scraping (spacecat-scraper / spacecat-content-scraper)
19
19
  * ExternalAPI — Third-party API call at audit run-time (Wikipedia, Reddit, YouTube)
@@ -22,7 +22,7 @@
22
22
  */
23
23
  export const DEPENDENCY_SOURCES = /** @type {const} */ ({
24
24
  RUM: 'RUM',
25
- AHREFS_IMPORT: 'AHREFSImport',
25
+ SEO_IMPORT: 'SEOImport',
26
26
  GSC: 'GSC',
27
27
  SCRAPING: 'scraping',
28
28
  EXTERNAL_API: 'ExternalAPI',
@@ -47,22 +47,22 @@ export const OPPORTUNITY_DEPENDENCY_MAP = {
47
47
  'high-organic-low-ctr': [DEPENDENCY_SOURCES.RUM, DEPENDENCY_SOURCES.GSC],
48
48
 
49
49
  // SEO — link audits
50
- 'broken-backlinks': [DEPENDENCY_SOURCES.AHREFS_IMPORT, DEPENDENCY_SOURCES.SCRAPING],
50
+ 'broken-backlinks': [DEPENDENCY_SOURCES.SEO_IMPORT, DEPENDENCY_SOURCES.SCRAPING],
51
51
  'broken-internal-links': [DEPENDENCY_SOURCES.RUM, DEPENDENCY_SOURCES.SCRAPING],
52
52
 
53
53
  // SEO — on-page / content
54
54
  canonical: [DEPENDENCY_SOURCES.SCRAPING],
55
55
  hreflang: [DEPENDENCY_SOURCES.SCRAPING],
56
- 'meta-tags': [DEPENDENCY_SOURCES.AHREFS_IMPORT, DEPENDENCY_SOURCES.SCRAPING],
56
+ 'meta-tags': [DEPENDENCY_SOURCES.SEO_IMPORT, DEPENDENCY_SOURCES.SCRAPING],
57
57
  sitemap: [DEPENDENCY_SOURCES.SCRAPING],
58
- 'sitemap-product-coverage': [DEPENDENCY_SOURCES.AHREFS_IMPORT, DEPENDENCY_SOURCES.SCRAPING],
58
+ 'sitemap-product-coverage': [DEPENDENCY_SOURCES.SEO_IMPORT, DEPENDENCY_SOURCES.SCRAPING],
59
59
  'structured-data': [DEPENDENCY_SOURCES.SCRAPING],
60
60
  'redirect-chains': [DEPENDENCY_SOURCES.SCRAPING],
61
61
  headings: [DEPENDENCY_SOURCES.SCRAPING],
62
62
 
63
63
  // Accessibility & content
64
64
  accessibility: [DEPENDENCY_SOURCES.SCRAPING],
65
- 'alt-text': [DEPENDENCY_SOURCES.AHREFS_IMPORT, DEPENDENCY_SOURCES.SCRAPING],
65
+ 'alt-text': [DEPENDENCY_SOURCES.SEO_IMPORT, DEPENDENCY_SOURCES.SCRAPING],
66
66
  'no-cta-above-the-fold': [DEPENDENCY_SOURCES.RUM, DEPENDENCY_SOURCES.SCRAPING],
67
67
  readability: [DEPENDENCY_SOURCES.SCRAPING],
68
68
 
@@ -85,7 +85,7 @@ export const OPPORTUNITY_DEPENDENCY_MAP = {
85
85
  'llm-blocked': [DEPENDENCY_SOURCES.SCRAPING],
86
86
  'llm-error-pages': [DEPENDENCY_SOURCES.SCRAPING],
87
87
  faqs: [DEPENDENCY_SOURCES.SCRAPING],
88
- 'related-urls': [DEPENDENCY_SOURCES.AHREFS_IMPORT],
88
+ 'related-urls': [DEPENDENCY_SOURCES.SEO_IMPORT],
89
89
  toc: [DEPENDENCY_SOURCES.SCRAPING],
90
90
 
91
91
  // Experimentation (ESS signals — organic traffic + RUM)
@@ -97,6 +97,7 @@ export const OPPORTUNITY_DEPENDENCY_MAP = {
97
97
  'wikipedia-analysis': [DEPENDENCY_SOURCES.EXTERNAL_API],
98
98
  'reddit-analysis': [DEPENDENCY_SOURCES.EXTERNAL_API],
99
99
  'youtube-analysis': [DEPENDENCY_SOURCES.EXTERNAL_API],
100
+ 'info-gain': [DEPENDENCY_SOURCES.SCRAPING, DEPENDENCY_SOURCES.EXTERNAL_API],
100
101
  };
101
102
 
102
103
  // ─── Query helpers ───────────────────────────────────────────────────────────
@@ -73,6 +73,7 @@ export const OPPORTUNITY_TITLES = {
73
73
  'wikipedia-analysis': 'Wikipedia Analysis',
74
74
  'reddit-analysis': 'Reddit Analysis',
75
75
  'youtube-analysis': 'YouTube Analysis',
76
+ 'info-gain': 'Information Gain',
76
77
  };
77
78
 
78
79
  /**
@@ -200,6 +200,33 @@ function extractUrlsFromOpportunity(opts) {
200
200
  }
201
201
  }
202
202
  break;
203
+ case OPPORTUNITY_TYPES.INFO_GAIN:
204
+ {
205
+ const pushCatalogRow = (row) => {
206
+ const entry = row?.data && typeof row.data === 'object' ? row.data : row;
207
+ if (!entry || typeof entry !== 'object') {
208
+ return;
209
+ }
210
+ const reportUrl = entry?.report?.url;
211
+ if (reportUrl && typeof reportUrl === 'string') {
212
+ urls.push(reportUrl);
213
+ }
214
+ const discovered = entry?.discoveredOpportunities;
215
+ if (Array.isArray(discovered)) {
216
+ discovered.forEach((opp) => {
217
+ const targetUrl = opp?.targetUrl;
218
+ if (targetUrl && typeof targetUrl === 'string') {
219
+ urls.push(targetUrl);
220
+ }
221
+ });
222
+ }
223
+ };
224
+ const embeddedSuggestions = data?.suggestions;
225
+ if (Array.isArray(embeddedSuggestions)) {
226
+ embeddedSuggestions.forEach(pushCatalogRow);
227
+ }
228
+ }
229
+ break;
203
230
  default:
204
231
  break;
205
232
  }