@houtini/seo-audit-console 0.9.0 → 0.10.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/README.md +16 -14
- package/dist/audit/checks.d.ts +0 -7
- package/dist/audit/checks.d.ts.map +1 -1
- package/dist/audit/checks.js +22 -282
- package/dist/audit/checks.js.map +1 -1
- package/dist/audit/drift.d.ts +0 -12
- package/dist/audit/drift.d.ts.map +1 -1
- package/dist/audit/drift.js +0 -15
- package/dist/audit/drift.js.map +1 -1
- package/dist/audit/engine.d.ts +0 -3
- package/dist/audit/engine.d.ts.map +1 -1
- package/dist/audit/engine.js +7 -42
- package/dist/audit/engine.js.map +1 -1
- package/dist/audit/keywordList.d.ts +0 -14
- package/dist/audit/keywordList.d.ts.map +1 -1
- package/dist/audit/keywordList.js +0 -5
- package/dist/audit/keywordList.js.map +1 -1
- package/dist/audit/opportunities.js +3 -26
- package/dist/audit/opportunities.js.map +1 -1
- package/dist/audit/recon.d.ts +0 -31
- package/dist/audit/recon.d.ts.map +1 -1
- package/dist/audit/recon.js +0 -27
- package/dist/audit/recon.js.map +1 -1
- package/dist/audit/report.d.ts +0 -4
- package/dist/audit/report.d.ts.map +1 -1
- package/dist/audit/report.js +0 -7
- package/dist/audit/report.js.map +1 -1
- package/dist/audit/schema-validate.d.ts +0 -26
- package/dist/audit/schema-validate.d.ts.map +1 -1
- package/dist/audit/schema-validate.js +8 -64
- package/dist/audit/schema-validate.js.map +1 -1
- package/dist/audit/templates.d.ts +0 -24
- package/dist/audit/templates.d.ts.map +1 -1
- package/dist/audit/templates.js +1 -21
- package/dist/audit/templates.js.map +1 -1
- package/dist/audit/topicGaps.d.ts +0 -1
- package/dist/audit/topicGaps.d.ts.map +1 -1
- package/dist/audit/topicGaps.js +3 -24
- package/dist/audit/topicGaps.js.map +1 -1
- package/dist/core/AuditDatabase.d.ts +0 -14
- package/dist/core/AuditDatabase.d.ts.map +1 -1
- package/dist/core/AuditDatabase.js +8 -61
- package/dist/core/AuditDatabase.js.map +1 -1
- package/dist/core/Backlinks.d.ts +0 -7
- package/dist/core/Backlinks.d.ts.map +1 -1
- package/dist/core/Backlinks.js +1 -23
- package/dist/core/Backlinks.js.map +1 -1
- package/dist/core/Crawler.d.ts +0 -1
- package/dist/core/Crawler.d.ts.map +1 -1
- package/dist/core/Crawler.js +24 -119
- package/dist/core/Crawler.js.map +1 -1
- package/dist/core/DataForSeoClient.d.ts +25 -74
- package/dist/core/DataForSeoClient.d.ts.map +1 -1
- package/dist/core/DataForSeoClient.js +65 -90
- package/dist/core/DataForSeoClient.js.map +1 -1
- package/dist/core/Entities.d.ts +0 -6
- package/dist/core/Entities.d.ts.map +1 -1
- package/dist/core/Entities.js +0 -8
- package/dist/core/Entities.js.map +1 -1
- package/dist/core/FirecrawlClient.d.ts +0 -18
- package/dist/core/FirecrawlClient.d.ts.map +1 -1
- package/dist/core/FirecrawlClient.js +1 -13
- package/dist/core/FirecrawlClient.js.map +1 -1
- package/dist/core/GscClient.d.ts +0 -7
- package/dist/core/GscClient.d.ts.map +1 -1
- package/dist/core/GscClient.js +1 -10
- package/dist/core/GscClient.js.map +1 -1
- package/dist/core/GscSync.d.ts +0 -4
- package/dist/core/GscSync.d.ts.map +1 -1
- package/dist/core/GscSync.js +2 -33
- package/dist/core/GscSync.js.map +1 -1
- package/dist/core/JobManager.d.ts +0 -5
- package/dist/core/JobManager.d.ts.map +1 -1
- package/dist/core/JobManager.js +0 -8
- package/dist/core/JobManager.js.map +1 -1
- package/dist/core/LinkIntersect.d.ts +0 -1
- package/dist/core/LinkIntersect.d.ts.map +1 -1
- package/dist/core/LinkIntersect.js +1 -37
- package/dist/core/LinkIntersect.js.map +1 -1
- package/dist/core/MajesticClient.d.ts +0 -26
- package/dist/core/MajesticClient.d.ts.map +1 -1
- package/dist/core/MajesticClient.js +0 -15
- package/dist/core/MajesticClient.js.map +1 -1
- package/dist/core/RankTracker.d.ts +0 -4
- package/dist/core/RankTracker.d.ts.map +1 -1
- package/dist/core/RankTracker.js +0 -9
- package/dist/core/RankTracker.js.map +1 -1
- package/dist/core/Refresh.d.ts +0 -6
- package/dist/core/Refresh.d.ts.map +1 -1
- package/dist/core/Refresh.js +0 -6
- package/dist/core/Refresh.js.map +1 -1
- package/dist/core/SupadataClient.d.ts +0 -11
- package/dist/core/SupadataClient.d.ts.map +1 -1
- package/dist/core/SupadataClient.js +0 -5
- package/dist/core/SupadataClient.js.map +1 -1
- package/dist/core/UrlInspector.d.ts +0 -5
- package/dist/core/UrlInspector.d.ts.map +1 -1
- package/dist/core/UrlInspector.js +0 -6
- package/dist/core/UrlInspector.js.map +1 -1
- package/dist/core/WikidataClient.d.ts +0 -2
- package/dist/core/WikidataClient.d.ts.map +1 -1
- package/dist/core/WikidataClient.js +0 -7
- package/dist/core/WikidataClient.js.map +1 -1
- package/dist/core/agentReadiness.d.ts +0 -9
- package/dist/core/agentReadiness.d.ts.map +1 -1
- package/dist/core/agentReadiness.js +0 -13
- package/dist/core/agentReadiness.js.map +1 -1
- package/dist/core/ctrModel.js +0 -3
- package/dist/core/ctrModel.js.map +1 -1
- package/dist/core/dashboardData.d.ts +0 -1
- package/dist/core/dashboardData.d.ts.map +1 -1
- package/dist/core/dashboardData.js +13 -95
- package/dist/core/dashboardData.js.map +1 -1
- package/dist/core/dataStorage.d.ts +0 -2
- package/dist/core/dataStorage.d.ts.map +1 -1
- package/dist/core/dataStorage.js +6 -19
- package/dist/core/dataStorage.js.map +1 -1
- package/dist/core/draftBrief.d.ts +0 -7
- package/dist/core/draftBrief.d.ts.map +1 -1
- package/dist/core/draftBrief.js +0 -10
- package/dist/core/draftBrief.js.map +1 -1
- package/dist/core/extract.d.ts +0 -11
- package/dist/core/extract.d.ts.map +1 -1
- package/dist/core/extract.js +1 -38
- package/dist/core/extract.js.map +1 -1
- package/dist/core/googleNews.d.ts +0 -11
- package/dist/core/googleNews.d.ts.map +1 -1
- package/dist/core/googleNews.js +0 -7
- package/dist/core/googleNews.js.map +1 -1
- package/dist/core/gscFreshness.d.ts +0 -10
- package/dist/core/gscFreshness.d.ts.map +1 -1
- package/dist/core/gscFreshness.js +0 -11
- package/dist/core/gscFreshness.js.map +1 -1
- package/dist/core/linkGraph.d.ts +0 -15
- package/dist/core/linkGraph.d.ts.map +1 -1
- package/dist/core/linkGraph.js +1 -23
- package/dist/core/linkGraph.js.map +1 -1
- package/dist/core/marketSizing.d.ts +0 -13
- package/dist/core/marketSizing.d.ts.map +1 -1
- package/dist/core/marketSizing.js +1 -1
- package/dist/core/marketSizing.js.map +1 -1
- package/dist/core/passageScore.d.ts +0 -13
- package/dist/core/passageScore.d.ts.map +1 -1
- package/dist/core/passageScore.js +1 -16
- package/dist/core/passageScore.js.map +1 -1
- package/dist/core/paths.d.ts +0 -3
- package/dist/core/paths.d.ts.map +1 -1
- package/dist/core/paths.js +0 -0
- package/dist/core/paths.js.map +1 -1
- package/dist/core/queryData.d.ts +0 -1
- package/dist/core/queryData.d.ts.map +1 -1
- package/dist/core/queryData.js +0 -18
- package/dist/core/queryData.js.map +1 -1
- package/dist/core/reconFetch.d.ts +0 -6
- package/dist/core/reconFetch.d.ts.map +1 -1
- package/dist/core/reconFetch.js +1 -4
- package/dist/core/reconFetch.js.map +1 -1
- package/dist/core/reconResearch.d.ts +0 -20
- package/dist/core/reconResearch.d.ts.map +1 -1
- package/dist/core/reconResearch.js +1 -16
- package/dist/core/reconResearch.js.map +1 -1
- package/dist/core/reranker.d.ts +0 -2
- package/dist/core/reranker.d.ts.map +1 -1
- package/dist/core/reranker.js +1 -11
- package/dist/core/reranker.js.map +1 -1
- package/dist/core/robots.d.ts +0 -6
- package/dist/core/robots.d.ts.map +1 -1
- package/dist/core/robots.js +1 -7
- package/dist/core/robots.js.map +1 -1
- package/dist/core/serpFootprint.d.ts +0 -12
- package/dist/core/serpFootprint.d.ts.map +1 -1
- package/dist/core/serpFootprint.js +0 -1
- package/dist/core/serpFootprint.js.map +1 -1
- package/dist/core/serpRecon.d.ts +0 -14
- package/dist/core/serpRecon.d.ts.map +1 -1
- package/dist/core/serpRecon.js +1 -13
- package/dist/core/serpRecon.js.map +1 -1
- package/dist/core/sitemap.js +3 -16
- package/dist/core/sitemap.js.map +1 -1
- package/dist/core/sql.d.ts +0 -4
- package/dist/core/sql.d.ts.map +1 -1
- package/dist/core/sql.js +0 -4
- package/dist/core/sql.js.map +1 -1
- package/dist/core/url-key.d.ts +0 -31
- package/dist/core/url-key.d.ts.map +1 -1
- package/dist/core/url-key.js +1 -38
- package/dist/core/url-key.js.map +1 -1
- package/dist/core/webHandlers.d.ts +0 -6
- package/dist/core/webHandlers.d.ts.map +1 -1
- package/dist/core/webHandlers.js +2 -5
- package/dist/core/webHandlers.js.map +1 -1
- package/dist/core/webServer.d.ts +0 -16
- package/dist/core/webServer.d.ts.map +1 -1
- package/dist/core/webServer.js +3 -17
- package/dist/core/webServer.js.map +1 -1
- package/dist/dashboard.js +0 -23
- package/dist/dashboard.js.map +1 -1
- package/dist/generators/index.d.ts +0 -7
- package/dist/generators/index.d.ts.map +1 -1
- package/dist/generators/index.js +1 -26
- package/dist/generators/index.js.map +1 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +190 -312
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
- package/server.json +85 -85
|
@@ -1,49 +1,31 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* DataForSEO client modelled on the official connection (api.dataforseo.com, Basic
|
|
3
|
-
* Auth, array-body POST, response under tasks[].result — per dataforseo/typescriptclient
|
|
4
|
-
* and dataforseo/mcp-server-typescript).
|
|
5
|
-
*
|
|
6
|
-
* Two cost-control layers the user asked for:
|
|
7
|
-
* - SINGULAR WORKER: live requests are serialised (one at a time) via a promise
|
|
8
|
-
* chain, so we never fan out paid calls concurrently.
|
|
9
|
-
* - TTL CACHE: every response is written to a shared SQLite cache keyed on
|
|
10
|
-
* (endpoint + body); a cache hit costs nothing and skips the worker entirely.
|
|
11
|
-
* TTL is set by the caller (DATAFORSEO_CACHE_DAYS, default 7); SERP/keyword/
|
|
12
|
-
* domain data is stable enough that a ~7-day TTL is safe.
|
|
13
|
-
*/
|
|
14
1
|
export interface DfsResponse {
|
|
15
2
|
tasks: any[];
|
|
16
3
|
cached: boolean;
|
|
17
4
|
cost: number;
|
|
18
5
|
}
|
|
6
|
+
export interface TrendTopic {
|
|
7
|
+
title: string;
|
|
8
|
+
type: string | null;
|
|
9
|
+
value: number | null;
|
|
10
|
+
}
|
|
11
|
+
export interface TrendQuery {
|
|
12
|
+
query: string;
|
|
13
|
+
value: number | null;
|
|
14
|
+
}
|
|
19
15
|
export declare class DataForSeoClient {
|
|
20
16
|
private readonly auth;
|
|
21
17
|
private readonly ttlMs;
|
|
22
18
|
private readonly cache;
|
|
23
19
|
private chain;
|
|
24
20
|
constructor(login: string, password: string, cacheDbPath: string, ttlDays?: number);
|
|
25
|
-
/** Serialise live work — only one request in flight at any time (singular worker). */
|
|
26
21
|
private serialize;
|
|
27
22
|
private keyFor;
|
|
28
|
-
/** POST to a DataForSEO endpoint, served from the 7-day cache when fresh. */
|
|
29
23
|
call(endpoint: string, body: unknown[], timeoutMs?: number): Promise<DfsResponse>;
|
|
30
|
-
/** Build the location field — numeric → location_code, string → location_name, else US default. */
|
|
31
24
|
private loc;
|
|
32
|
-
/** KEYWORDS_DATA — true monthly search volume + CPC + competition (cheap). */
|
|
33
25
|
searchVolume(keywords: string[], location?: string | number, languageCode?: string): Promise<DfsResponse>;
|
|
34
|
-
/** SERP — live Google organic results (per-request cost; use sparingly).
|
|
35
|
-
* `depth` = how many ORGANIC results to collect (not total SERP elements), so a domain absent
|
|
36
|
-
* at depth=20 is absent from the top 20 organic — nothing is known about its position beyond that.
|
|
37
|
-
* `loadAsyncAiOverview` makes DataForSEO wait for a client-side-loaded AI Overview and return its
|
|
38
|
-
* references; without it those SERPs come back with an empty AIO (asynchronous_ai_overview:true)
|
|
39
|
-
* and citation is unknowable. Small surcharge, refunded when no async AIO is found. */
|
|
40
26
|
serpOrganic(keyword: string, location?: string | number, languageCode?: string, depth?: number, opts?: {
|
|
41
27
|
loadAsyncAiOverview?: boolean;
|
|
42
28
|
}): Promise<DfsResponse>;
|
|
43
|
-
/** SERP — live YouTube organic results for a keyword (video discovery). Same SERP
|
|
44
|
-
* scope + 7-day cache as serpOrganic. Returns the ranking videos shaped for content
|
|
45
|
-
* research: title, url, channel, views, publish date, duration. `blockDepth` = how many
|
|
46
|
-
* videos to collect (YouTube SERP uses block_depth, default 20, max 200). */
|
|
47
29
|
serpYoutube(keyword: string, location?: string | number, languageCode?: string, blockDepth?: number): Promise<{
|
|
48
30
|
videos: Array<{
|
|
49
31
|
rank: number | null;
|
|
@@ -61,9 +43,6 @@ export declare class DataForSeoClient {
|
|
|
61
43
|
cached: boolean;
|
|
62
44
|
cost: number;
|
|
63
45
|
}>;
|
|
64
|
-
/** SERP — live Google News results for a keyword (what's been PUBLISHED / freshness).
|
|
65
|
-
* Same SERP scope + 7-day cache. Flattens both `news_search` items and `top_stories`
|
|
66
|
-
* groups into one ranked list: title, url, source, snippet, timestamp. */
|
|
67
46
|
serpNews(keyword: string, location?: string | number, languageCode?: string, depth?: number): Promise<{
|
|
68
47
|
articles: Array<{
|
|
69
48
|
rank: number | null;
|
|
@@ -77,14 +56,11 @@ export declare class DataForSeoClient {
|
|
|
77
56
|
cached: boolean;
|
|
78
57
|
cost: number;
|
|
79
58
|
}>;
|
|
80
|
-
/** KEYWORDS_DATA — Google Trends relative interest (0–100) over time for up to 5
|
|
81
|
-
* keywords, for seasonality / "is this rising or fading". Returns the time series per
|
|
82
|
-
* keyword (values aligned to the queried keywords). `timeRange` presets: past_7_days,
|
|
83
|
-
* past_30_days, past_90_days, past_12_months (default), past_5_years, 2004_present.
|
|
84
|
-
* `type`: web (default), news, youtube, images, froogle. Cached 7 days. */
|
|
85
59
|
googleTrends(keywords: string[], location?: string | number, languageCode?: string, opts?: {
|
|
86
60
|
timeRange?: string;
|
|
87
61
|
type?: string;
|
|
62
|
+
categoryCode?: number;
|
|
63
|
+
related?: boolean;
|
|
88
64
|
}): Promise<{
|
|
89
65
|
series: Array<{
|
|
90
66
|
dateFrom: string | null;
|
|
@@ -92,63 +68,38 @@ export declare class DataForSeoClient {
|
|
|
92
68
|
values: Record<string, number | null>;
|
|
93
69
|
}>;
|
|
94
70
|
keywords: string[];
|
|
71
|
+
categoryCode: number | null;
|
|
95
72
|
cached: boolean;
|
|
96
73
|
cost: number;
|
|
74
|
+
topics?: {
|
|
75
|
+
top: TrendTopic[];
|
|
76
|
+
rising: TrendTopic[];
|
|
77
|
+
};
|
|
78
|
+
queries?: {
|
|
79
|
+
top: TrendQuery[];
|
|
80
|
+
rising: TrendQuery[];
|
|
81
|
+
};
|
|
97
82
|
}>;
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
83
|
+
googleTrendsCategories(): Promise<Array<{
|
|
84
|
+
code: number;
|
|
85
|
+
name: string;
|
|
86
|
+
parent: number | null;
|
|
87
|
+
}>>;
|
|
103
88
|
relatedTerms(keyword: string, location?: string | number, languageCode?: string): Promise<{
|
|
104
89
|
peopleAlsoAsk: string[];
|
|
105
90
|
relatedSearches: string[];
|
|
106
91
|
cached: boolean;
|
|
107
92
|
cost: number;
|
|
108
93
|
}>;
|
|
109
|
-
/** Labs — domain ranking distribution over time (monthly). The over-time sequence. */
|
|
110
94
|
historicalRankOverview(target: string, location?: string | number, languageCode?: string, languageName?: string): Promise<DfsResponse>;
|
|
111
|
-
/** Labs — a domain's top ranking pages by estimated organic traffic (relevant_pages). */
|
|
112
95
|
relevantPages(target: string, location?: string | number, languageCode?: string, limit?: number): Promise<DfsResponse>;
|
|
113
|
-
/**
|
|
114
|
-
* Labs — every keyword a target ranks for. `target` may be a domain, a subdomain,
|
|
115
|
-
* or a full URL (DataForSEO switches mode on the shape). Optional `filters` narrows
|
|
116
|
-
* to e.g. a subfolder via ranked_serp_element.serp_item.relative_url LIKE.
|
|
117
|
-
*/
|
|
118
96
|
rankedKeywords(target: string, location?: string | number, languageCode?: string, limit?: number, orderBy?: string, filters?: unknown[]): Promise<DfsResponse>;
|
|
119
|
-
/** Backlinks — overall profile for a domain (total backlinks, referring domains, spam). Cheap. */
|
|
120
97
|
backlinksSummary(target: string): Promise<DfsResponse>;
|
|
121
|
-
/** Backlinks — per-page backlink/referring-domain counts for a domain (top pages by backlinks). */
|
|
122
98
|
domainPagesSummary(target: string, limit?: number): Promise<DfsResponse>;
|
|
123
|
-
/**
|
|
124
|
-
* Backlinks — LINK INTERSECT: domains that link to a set of competitor `targets`, minus
|
|
125
|
-
* anything already linking to `excludeTarget` (our own domain). Each returned item is a
|
|
126
|
-
* referring domain with a `domain_intersection.{N}` entry per competitor it links to
|
|
127
|
-
* (N maps back to the `targets` array position) plus `summary.intersections_count`.
|
|
128
|
-
* Server-side `order_by: intersections_count,desc` is target-agnostic (the union), so a
|
|
129
|
-
* generous limit captures the true multi-competitor intersect; priority (followed +
|
|
130
|
-
* domain trust) and spam filtering are applied client-side in LinkIntersect. ~$0.024/call.
|
|
131
|
-
*/
|
|
132
99
|
domainIntersection(targets: string[], excludeTarget?: string, limit?: number): Promise<DfsResponse>;
|
|
133
|
-
/**
|
|
134
|
-
* Labs — classify the search intent of keywords (informational / navigational /
|
|
135
|
-
* commercial / transactional) with a probability + secondary intents. Language-only
|
|
136
|
-
* (no location), up to 1000 keywords per call. Cheap (~50 credits).
|
|
137
|
-
*/
|
|
138
100
|
searchIntent(keywords: string[], languageCode?: string): Promise<DfsResponse>;
|
|
139
|
-
/**
|
|
140
|
-
* On-Page — live Lighthouse audit for ONE url (lab Core Web Vitals + opportunities).
|
|
141
|
-
* Pricier (~2000 credits) and slow: Lighthouse renders the page, so allow up to 120s
|
|
142
|
-
* (DataForSEO aborts at 120s). `for_mobile` defaults true (mobile-first).
|
|
143
|
-
*/
|
|
144
101
|
lighthouse(url: string, forMobile?: boolean, languageCode?: string): Promise<DfsResponse>;
|
|
145
|
-
/** Labs — competitor domains by organic keyword overlap (discovery seed for gap analysis). */
|
|
146
102
|
competitorsDomain(target: string, location?: string | number, languageCode?: string, limit?: number): Promise<DfsResponse>;
|
|
147
|
-
/**
|
|
148
|
-
* Labs — keywords that a set of competitor pages rank for but our page(s) do NOT
|
|
149
|
-
* (content gap). `competitorUrls` → the `pages` map (max 20); `excludeUrls` → our own
|
|
150
|
-
* page(s) to subtract (max 10). Sorted by search volume. Wildcards like `…/*` allowed.
|
|
151
|
-
*/
|
|
152
103
|
pageIntersection(competitorUrls: string[], excludeUrls: string[], location?: string | number, languageCode?: string, limit?: number): Promise<DfsResponse>;
|
|
153
104
|
cacheStats(): {
|
|
154
105
|
rows: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataForSeoClient.d.ts","sourceRoot":"","sources":["../../src/core/DataForSeoClient.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DataForSeoClient.d.ts","sourceRoot":"","sources":["../../src/core/DataForSeoClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,32 +14,29 @@ export class DataForSeoClient {
|
|
|
14
14
|
mkdirSync(dirname(cacheDbPath), { recursive: true });
|
|
15
15
|
this.cache = new Database(cacheDbPath);
|
|
16
16
|
this.cache.pragma('journal_mode = WAL');
|
|
17
|
-
this.cache.exec(`
|
|
18
|
-
CREATE TABLE IF NOT EXISTS dataforseo_cache (
|
|
19
|
-
cache_key TEXT PRIMARY KEY,
|
|
20
|
-
endpoint TEXT NOT NULL,
|
|
21
|
-
request_json TEXT,
|
|
22
|
-
response_json TEXT NOT NULL,
|
|
23
|
-
cost REAL DEFAULT 0,
|
|
24
|
-
fetched_at TEXT NOT NULL
|
|
25
|
-
);
|
|
26
|
-
CREATE INDEX IF NOT EXISTS idx_dfs_endpoint ON dataforseo_cache(endpoint);
|
|
17
|
+
this.cache.exec(`
|
|
18
|
+
CREATE TABLE IF NOT EXISTS dataforseo_cache (
|
|
19
|
+
cache_key TEXT PRIMARY KEY,
|
|
20
|
+
endpoint TEXT NOT NULL,
|
|
21
|
+
request_json TEXT,
|
|
22
|
+
response_json TEXT NOT NULL,
|
|
23
|
+
cost REAL DEFAULT 0,
|
|
24
|
+
fetched_at TEXT NOT NULL
|
|
25
|
+
);
|
|
26
|
+
CREATE INDEX IF NOT EXISTS idx_dfs_endpoint ON dataforseo_cache(endpoint);
|
|
27
27
|
`);
|
|
28
28
|
}
|
|
29
|
-
/** Serialise live work — only one request in flight at any time (singular worker). */
|
|
30
29
|
serialize(fn) {
|
|
31
30
|
const result = this.chain.then(fn, fn);
|
|
32
31
|
this.chain = result.then(() => undefined, () => undefined);
|
|
33
32
|
return result;
|
|
34
33
|
}
|
|
35
34
|
keyFor(endpoint, body) {
|
|
36
|
-
// Canonical (key-sorted) serialisation so equivalent bodies hash identically.
|
|
37
35
|
const canonical = JSON.stringify(body, (_k, v) => v && typeof v === 'object' && !Array.isArray(v)
|
|
38
36
|
? Object.fromEntries(Object.entries(v).sort(([a], [b]) => (a < b ? -1 : 1)))
|
|
39
37
|
: v);
|
|
40
38
|
return createHash('sha256').update(endpoint + '\n' + canonical).digest('hex');
|
|
41
39
|
}
|
|
42
|
-
/** POST to a DataForSEO endpoint, served from the 7-day cache when fresh. */
|
|
43
40
|
async call(endpoint, body, timeoutMs = 60000) {
|
|
44
41
|
const key = this.keyFor(endpoint, body);
|
|
45
42
|
const row = this.cache
|
|
@@ -49,8 +46,6 @@ export class DataForSeoClient {
|
|
|
49
46
|
return { tasks: JSON.parse(row.response_json), cached: true, cost: 0 };
|
|
50
47
|
}
|
|
51
48
|
return this.serialize(async () => {
|
|
52
|
-
// Re-check the cache now that we hold the single-worker slot: a concurrent identical
|
|
53
|
-
// call may have just paid for and cached this exact request — don't double-spend.
|
|
54
49
|
const again = this.cache
|
|
55
50
|
.prepare('SELECT response_json, fetched_at FROM dataforseo_cache WHERE cache_key = ?')
|
|
56
51
|
.get(key);
|
|
@@ -68,49 +63,36 @@ export class DataForSeoClient {
|
|
|
68
63
|
throw new Error(`DataForSEO ${endpoint} failed: ${res.status} ${json?.status_message ?? ''}`.trim());
|
|
69
64
|
}
|
|
70
65
|
const tasks = json.tasks ?? [];
|
|
71
|
-
// Task-level failures (40xxx inside tasks[0]) must be LOUD — swallowed, they surface as a
|
|
72
|
-
// plausible-looking empty result (found live: Labs rejecting a field returned [] at $0).
|
|
73
66
|
const t0 = tasks[0];
|
|
74
67
|
if (t0 && (t0.status_code ?? 20000) >= 40000) {
|
|
75
68
|
throw new Error(`DataForSEO ${endpoint} task failed: ${t0.status_code} ${t0.status_message ?? ''}`.trim() +
|
|
76
69
|
(t0.status_code === 40204 ? ' — the Backlinks API is a separate DataForSEO subscription; activate it at app.dataforseo.com to use pull_backlinks.' : ''));
|
|
77
70
|
}
|
|
78
71
|
const cost = Number(json.cost) || 0;
|
|
79
|
-
// Only cache genuinely successful responses — a task-level failure (40xxx) or
|
|
80
|
-
// all-null results must not be cached for 7 days; let a later call retry.
|
|
81
72
|
const taskOk = tasks.length > 0 && (tasks[0]?.status_code ?? 20000) < 40000 && tasks.some((t) => t?.result != null);
|
|
82
73
|
if (taskOk) {
|
|
83
74
|
this.cache
|
|
84
|
-
.prepare(`INSERT INTO dataforseo_cache (cache_key, endpoint, request_json, response_json, cost, fetched_at)
|
|
85
|
-
VALUES (?, ?, ?, ?, ?, datetime('now'))
|
|
86
|
-
ON CONFLICT(cache_key) DO UPDATE SET response_json=excluded.response_json,
|
|
75
|
+
.prepare(`INSERT INTO dataforseo_cache (cache_key, endpoint, request_json, response_json, cost, fetched_at)
|
|
76
|
+
VALUES (?, ?, ?, ?, ?, datetime('now'))
|
|
77
|
+
ON CONFLICT(cache_key) DO UPDATE SET response_json=excluded.response_json,
|
|
87
78
|
cost=excluded.cost, fetched_at=datetime('now')`)
|
|
88
79
|
.run(key, endpoint, JSON.stringify(body), JSON.stringify(tasks), cost);
|
|
89
80
|
}
|
|
90
81
|
return { tasks, cached: false, cost };
|
|
91
82
|
});
|
|
92
83
|
}
|
|
93
|
-
// ── Typed helpers (within our enabled scopes) ─────────────────────────────
|
|
94
|
-
/** Build the location field — numeric → location_code, string → location_name, else US default. */
|
|
95
84
|
loc(location) {
|
|
96
85
|
if (typeof location === 'number')
|
|
97
86
|
return { location_code: location };
|
|
98
87
|
if (typeof location === 'string' && location.trim())
|
|
99
88
|
return { location_name: location.trim() };
|
|
100
|
-
return { location_code: 2840 };
|
|
89
|
+
return { location_code: 2840 };
|
|
101
90
|
}
|
|
102
|
-
/** KEYWORDS_DATA — true monthly search volume + CPC + competition (cheap). */
|
|
103
91
|
async searchVolume(keywords, location, languageCode = 'en') {
|
|
104
92
|
return this.call('/v3/keywords_data/google_ads/search_volume/live', [
|
|
105
93
|
{ keywords, ...this.loc(location), language_code: languageCode },
|
|
106
94
|
]);
|
|
107
95
|
}
|
|
108
|
-
/** SERP — live Google organic results (per-request cost; use sparingly).
|
|
109
|
-
* `depth` = how many ORGANIC results to collect (not total SERP elements), so a domain absent
|
|
110
|
-
* at depth=20 is absent from the top 20 organic — nothing is known about its position beyond that.
|
|
111
|
-
* `loadAsyncAiOverview` makes DataForSEO wait for a client-side-loaded AI Overview and return its
|
|
112
|
-
* references; without it those SERPs come back with an empty AIO (asynchronous_ai_overview:true)
|
|
113
|
-
* and citation is unknowable. Small surcharge, refunded when no async AIO is found. */
|
|
114
96
|
async serpOrganic(keyword, location, languageCode = 'en', depth = 20, opts = {}) {
|
|
115
97
|
return this.call('/v3/serp/google/organic/live/advanced', [
|
|
116
98
|
{
|
|
@@ -119,10 +101,6 @@ export class DataForSeoClient {
|
|
|
119
101
|
},
|
|
120
102
|
]);
|
|
121
103
|
}
|
|
122
|
-
/** SERP — live YouTube organic results for a keyword (video discovery). Same SERP
|
|
123
|
-
* scope + 7-day cache as serpOrganic. Returns the ranking videos shaped for content
|
|
124
|
-
* research: title, url, channel, views, publish date, duration. `blockDepth` = how many
|
|
125
|
-
* videos to collect (YouTube SERP uses block_depth, default 20, max 200). */
|
|
126
104
|
async serpYoutube(keyword, location, languageCode = 'en', blockDepth = 20) {
|
|
127
105
|
const r = await this.call('/v3/serp/youtube/organic/live/advanced', [
|
|
128
106
|
{ keyword, ...this.loc(location), language_code: languageCode, block_depth: blockDepth },
|
|
@@ -145,9 +123,6 @@ export class DataForSeoClient {
|
|
|
145
123
|
}));
|
|
146
124
|
return { videos, cached: r.cached, cost: r.cost };
|
|
147
125
|
}
|
|
148
|
-
/** SERP — live Google News results for a keyword (what's been PUBLISHED / freshness).
|
|
149
|
-
* Same SERP scope + 7-day cache. Flattens both `news_search` items and `top_stories`
|
|
150
|
-
* groups into one ranked list: title, url, source, snippet, timestamp. */
|
|
151
126
|
async serpNews(keyword, location, languageCode = 'en', depth = 20) {
|
|
152
127
|
const r = await this.call('/v3/serp/google/news/live/advanced', [
|
|
153
128
|
{ keyword, ...this.loc(location), language_code: languageCode, depth },
|
|
@@ -166,35 +141,71 @@ export class DataForSeoClient {
|
|
|
166
141
|
}
|
|
167
142
|
return { articles, cached: r.cached, cost: r.cost };
|
|
168
143
|
}
|
|
169
|
-
/** KEYWORDS_DATA — Google Trends relative interest (0–100) over time for up to 5
|
|
170
|
-
* keywords, for seasonality / "is this rising or fading". Returns the time series per
|
|
171
|
-
* keyword (values aligned to the queried keywords). `timeRange` presets: past_7_days,
|
|
172
|
-
* past_30_days, past_90_days, past_12_months (default), past_5_years, 2004_present.
|
|
173
|
-
* `type`: web (default), news, youtube, images, froogle. Cached 7 days. */
|
|
174
144
|
async googleTrends(keywords, location, languageCode = 'en', opts = {}) {
|
|
175
145
|
const kwIn = keywords.slice(0, 5);
|
|
146
|
+
const cat = opts.categoryCode && opts.categoryCode > 0 ? opts.categoryCode : null;
|
|
147
|
+
if (!kwIn.length && !cat)
|
|
148
|
+
throw new Error('googleTrends needs keywords, a categoryCode > 0, or both');
|
|
149
|
+
if (opts.related && kwIn.length > 1)
|
|
150
|
+
throw new Error('related topics/queries need at most one keyword (DataForSEO limit)');
|
|
151
|
+
const itemTypes = ['google_trends_graph', ...(opts.related ? ['google_trends_topics_list', 'google_trends_queries_list'] : [])];
|
|
176
152
|
const r = await this.call('/v3/keywords_data/google_trends/explore/live', [
|
|
177
153
|
{
|
|
178
|
-
keywords: kwIn, ...
|
|
154
|
+
...(kwIn.length ? { keywords: kwIn } : {}), ...(cat ? { category_code: cat } : {}),
|
|
155
|
+
...this.loc(location), language_code: languageCode,
|
|
179
156
|
type: opts.type ?? 'web', time_range: opts.timeRange ?? 'past_12_months',
|
|
180
|
-
item_types:
|
|
157
|
+
item_types: itemTypes,
|
|
181
158
|
},
|
|
182
159
|
]);
|
|
183
160
|
const result = r.tasks[0]?.result?.[0];
|
|
184
|
-
const
|
|
185
|
-
const
|
|
161
|
+
const items = result?.items ?? [];
|
|
162
|
+
const kw = kwIn.length ? (Array.isArray(result?.keywords) && result.keywords.length ? result.keywords : kwIn) : [`category:${cat}`];
|
|
163
|
+
const graph = items.find((it) => it.type === 'google_trends_graph');
|
|
186
164
|
const series = (graph?.data ?? []).map((d) => ({
|
|
187
165
|
dateFrom: d.date_from ?? null,
|
|
188
166
|
dateTo: d.date_to ?? null,
|
|
189
167
|
values: Object.fromEntries(kw.map((k, i) => [k, d.values?.[i] ?? null])),
|
|
190
168
|
}));
|
|
191
|
-
|
|
169
|
+
const list = (type) => items.find((it) => it.type === type)?.data;
|
|
170
|
+
const num = (v) => (v == null || v === '' ? null : Number(v));
|
|
171
|
+
const topicsData = list('google_trends_topics_list');
|
|
172
|
+
const queriesData = list('google_trends_queries_list');
|
|
173
|
+
const toTopic = (t) => ({ title: t.topic_title, type: t.topic_type ?? null, value: num(t.value) });
|
|
174
|
+
const toQuery = (q) => ({ query: q.query, value: num(q.value) });
|
|
175
|
+
return {
|
|
176
|
+
series, keywords: kw, categoryCode: cat, cached: r.cached, cost: r.cost,
|
|
177
|
+
...(opts.related ? {
|
|
178
|
+
topics: { top: (topicsData?.top ?? []).map(toTopic), rising: (topicsData?.rising ?? []).map(toTopic) },
|
|
179
|
+
queries: { top: (queriesData?.top ?? []).map(toQuery), rising: (queriesData?.rising ?? []).map(toQuery) },
|
|
180
|
+
} : {}),
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
async googleTrendsCategories() {
|
|
184
|
+
const endpoint = '/v3/keywords_data/google_trends/categories';
|
|
185
|
+
const key = this.keyFor(endpoint, ['GET']);
|
|
186
|
+
const row = this.cache
|
|
187
|
+
.prepare('SELECT response_json, fetched_at FROM dataforseo_cache WHERE cache_key = ?')
|
|
188
|
+
.get(key);
|
|
189
|
+
let tasks;
|
|
190
|
+
if (row && Date.now() - Date.parse(row.fetched_at) < this.ttlMs) {
|
|
191
|
+
tasks = JSON.parse(row.response_json);
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
const res = await fetch(`${BASE_URL}${endpoint}`, { headers: { Authorization: this.auth }, signal: AbortSignal.timeout(60000) });
|
|
195
|
+
const json = await res.json();
|
|
196
|
+
if (!res.ok || json?.status_code >= 40000)
|
|
197
|
+
throw new Error(`DataForSEO ${endpoint} failed: ${res.status} ${json?.status_message ?? ''}`.trim());
|
|
198
|
+
tasks = json.tasks ?? [];
|
|
199
|
+
if (tasks[0]?.result?.length) {
|
|
200
|
+
this.cache
|
|
201
|
+
.prepare(`INSERT INTO dataforseo_cache (cache_key, endpoint, request_json, response_json, cost, fetched_at)
|
|
202
|
+
VALUES (?, ?, ?, ?, 0, datetime('now'))
|
|
203
|
+
ON CONFLICT(cache_key) DO UPDATE SET response_json=excluded.response_json, fetched_at=datetime('now')`)
|
|
204
|
+
.run(key, endpoint, '["GET"]', JSON.stringify(tasks));
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return (tasks[0]?.result ?? []).map((c) => ({ code: c.category_code, name: c.category_name, parent: c.category_code_parent ?? null }));
|
|
192
208
|
}
|
|
193
|
-
/**
|
|
194
|
-
* Related terms for a keyword — People Also Ask questions + related searches,
|
|
195
|
-
* parsed from the SERP advanced response. Powers the click-through "related
|
|
196
|
-
* terms" on the keyword charts. Cached 7 days via the underlying SERP call.
|
|
197
|
-
*/
|
|
198
209
|
async relatedTerms(keyword, location, languageCode = 'en') {
|
|
199
210
|
const r = await this.serpOrganic(keyword, location, languageCode, 30);
|
|
200
211
|
const items = r.tasks[0]?.result?.[0]?.items ?? [];
|
|
@@ -217,13 +228,11 @@ export class DataForSeoClient {
|
|
|
217
228
|
}
|
|
218
229
|
return { peopleAlsoAsk, relatedSearches, cached: r.cached, cost: r.cost };
|
|
219
230
|
}
|
|
220
|
-
/** Labs — domain ranking distribution over time (monthly). The over-time sequence. */
|
|
221
231
|
async historicalRankOverview(target, location, languageCode = 'en', languageName) {
|
|
222
232
|
return this.call('/v3/dataforseo_labs/google/historical_rank_overview/live', [
|
|
223
233
|
{ target, ...this.loc(location), ...(languageName ? { language_name: languageName } : { language_code: languageCode }) },
|
|
224
234
|
]);
|
|
225
235
|
}
|
|
226
|
-
/** Labs — a domain's top ranking pages by estimated organic traffic (relevant_pages). */
|
|
227
236
|
async relevantPages(target, location, languageCode = 'en', limit = 25) {
|
|
228
237
|
return this.call('/v3/dataforseo_labs/google/relevant_pages/live', [
|
|
229
238
|
{
|
|
@@ -236,14 +245,7 @@ export class DataForSeoClient {
|
|
|
236
245
|
},
|
|
237
246
|
]);
|
|
238
247
|
}
|
|
239
|
-
/**
|
|
240
|
-
* Labs — every keyword a target ranks for. `target` may be a domain, a subdomain,
|
|
241
|
-
* or a full URL (DataForSEO switches mode on the shape). Optional `filters` narrows
|
|
242
|
-
* to e.g. a subfolder via ranked_serp_element.serp_item.relative_url LIKE.
|
|
243
|
-
*/
|
|
244
248
|
async rankedKeywords(target, location, languageCode = 'en', limit = 50, orderBy = 'ranked_serp_element.serp_item.etv,desc', filters) {
|
|
245
|
-
// NB: item_types is NOT a valid field on Labs ranked_keywords (40501) — element-type
|
|
246
|
-
// scoping (e.g. AI Overview citations) is expressed via `filters` on serp_item.type.
|
|
247
249
|
const body = {
|
|
248
250
|
target,
|
|
249
251
|
...this.loc(location),
|
|
@@ -255,25 +257,14 @@ export class DataForSeoClient {
|
|
|
255
257
|
body.filters = filters;
|
|
256
258
|
return this.call('/v3/dataforseo_labs/google/ranked_keywords/live', [body]);
|
|
257
259
|
}
|
|
258
|
-
/** Backlinks — overall profile for a domain (total backlinks, referring domains, spam). Cheap. */
|
|
259
260
|
async backlinksSummary(target) {
|
|
260
261
|
return this.call('/v3/backlinks/summary/live', [{ target, internal_list_limit: 1, backlinks_status_type: 'live' }]);
|
|
261
262
|
}
|
|
262
|
-
/** Backlinks — per-page backlink/referring-domain counts for a domain (top pages by backlinks). */
|
|
263
263
|
async domainPagesSummary(target, limit = 1000) {
|
|
264
264
|
return this.call('/v3/backlinks/domain_pages_summary/live', [
|
|
265
265
|
{ target, limit: Math.min(limit, 1000), order_by: ['backlinks,desc'], backlinks_status_type: 'live' },
|
|
266
266
|
]);
|
|
267
267
|
}
|
|
268
|
-
/**
|
|
269
|
-
* Backlinks — LINK INTERSECT: domains that link to a set of competitor `targets`, minus
|
|
270
|
-
* anything already linking to `excludeTarget` (our own domain). Each returned item is a
|
|
271
|
-
* referring domain with a `domain_intersection.{N}` entry per competitor it links to
|
|
272
|
-
* (N maps back to the `targets` array position) plus `summary.intersections_count`.
|
|
273
|
-
* Server-side `order_by: intersections_count,desc` is target-agnostic (the union), so a
|
|
274
|
-
* generous limit captures the true multi-competitor intersect; priority (followed +
|
|
275
|
-
* domain trust) and spam filtering are applied client-side in LinkIntersect. ~$0.024/call.
|
|
276
|
-
*/
|
|
277
268
|
async domainIntersection(targets, excludeTarget, limit = 300) {
|
|
278
269
|
const targetMap = {};
|
|
279
270
|
targets.slice(0, 20).forEach((t, i) => { targetMap[String(i + 1)] = t; });
|
|
@@ -287,35 +278,19 @@ export class DataForSeoClient {
|
|
|
287
278
|
body.exclude_targets = [excludeTarget];
|
|
288
279
|
return this.call('/v3/backlinks/domain_intersection/live', [body]);
|
|
289
280
|
}
|
|
290
|
-
/**
|
|
291
|
-
* Labs — classify the search intent of keywords (informational / navigational /
|
|
292
|
-
* commercial / transactional) with a probability + secondary intents. Language-only
|
|
293
|
-
* (no location), up to 1000 keywords per call. Cheap (~50 credits).
|
|
294
|
-
*/
|
|
295
281
|
async searchIntent(keywords, languageCode = 'en') {
|
|
296
282
|
return this.call('/v3/dataforseo_labs/google/search_intent/live', [
|
|
297
283
|
{ keywords: keywords.slice(0, 1000), language_code: languageCode },
|
|
298
284
|
]);
|
|
299
285
|
}
|
|
300
|
-
/**
|
|
301
|
-
* On-Page — live Lighthouse audit for ONE url (lab Core Web Vitals + opportunities).
|
|
302
|
-
* Pricier (~2000 credits) and slow: Lighthouse renders the page, so allow up to 120s
|
|
303
|
-
* (DataForSEO aborts at 120s). `for_mobile` defaults true (mobile-first).
|
|
304
|
-
*/
|
|
305
286
|
async lighthouse(url, forMobile = true, languageCode = 'en') {
|
|
306
287
|
return this.call('/v3/on_page/lighthouse/live/json', [{ url, for_mobile: forMobile, language_code: languageCode, categories: ['performance', 'seo', 'best_practices', 'accessibility'] }], 120000);
|
|
307
288
|
}
|
|
308
|
-
/** Labs — competitor domains by organic keyword overlap (discovery seed for gap analysis). */
|
|
309
289
|
async competitorsDomain(target, location, languageCode = 'en', limit = 20) {
|
|
310
290
|
return this.call('/v3/dataforseo_labs/google/competitors_domain/live', [
|
|
311
291
|
{ target, ...this.loc(location), language_code: languageCode, limit: Math.min(limit, 1000), exclude_top_domains: true },
|
|
312
292
|
]);
|
|
313
293
|
}
|
|
314
|
-
/**
|
|
315
|
-
* Labs — keywords that a set of competitor pages rank for but our page(s) do NOT
|
|
316
|
-
* (content gap). `competitorUrls` → the `pages` map (max 20); `excludeUrls` → our own
|
|
317
|
-
* page(s) to subtract (max 10). Sorted by search volume. Wildcards like `…/*` allowed.
|
|
318
|
-
*/
|
|
319
294
|
async pageIntersection(competitorUrls, excludeUrls, location, languageCode = 'en', limit = 100) {
|
|
320
295
|
const pages = {};
|
|
321
296
|
competitorUrls.slice(0, 20).forEach((u, i) => { pages[String(i + 1)] = u; });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataForSeoClient.js","sourceRoot":"","sources":["../../src/core/DataForSeoClient.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DataForSeoClient.js","sourceRoot":"","sources":["../../src/core/DataForSeoClient.ts"],"names":[],"mappings":"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"}
|
package/dist/core/Entities.d.ts
CHANGED
|
@@ -5,12 +5,6 @@ export interface EntitiesResult {
|
|
|
5
5
|
attempted: number;
|
|
6
6
|
edges: number;
|
|
7
7
|
}
|
|
8
|
-
/**
|
|
9
|
-
* Heuristic entity resolution (6d): resolve the primary entity of the top-N indexable pages
|
|
10
|
-
* by H1 (fallback title) via Wikidata search, persist to page_entity, and store each entity's
|
|
11
|
-
* subclass-of / part-of edges to page_entity peers. Heuristic (H1→QID can mis-resolve), so the
|
|
12
|
-
* findings it powers are labelled N and gated behind includeJudgement. On-demand only.
|
|
13
|
-
*/
|
|
14
8
|
export declare class Entities {
|
|
15
9
|
private readonly wd;
|
|
16
10
|
private readonly dataDir;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Entities.d.ts","sourceRoot":"","sources":["../../src/core/Entities.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,MAAM,WAAW,cAAc;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;
|
|
1
|
+
{"version":3,"file":"Entities.d.ts","sourceRoot":"","sources":["../../src/core/Entities.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,MAAM,WAAW,cAAc;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AAQvG,qBAAa,QAAQ;IACP,OAAO,CAAC,QAAQ,CAAC,EAAE;IAAkB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAA5C,EAAE,EAAE,cAAc,EAAmB,OAAO,EAAE,MAAM;IAE3E,GAAG,CACP,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,EAC3C,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,EAC5C,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,cAAc,CAAC;CA6C3B"}
|
package/dist/core/Entities.js
CHANGED
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
import { AuditDatabase } from './AuditDatabase.js';
|
|
2
2
|
import { dbPathFor } from './paths.js';
|
|
3
|
-
/**
|
|
4
|
-
* Heuristic entity resolution (6d): resolve the primary entity of the top-N indexable pages
|
|
5
|
-
* by H1 (fallback title) via Wikidata search, persist to page_entity, and store each entity's
|
|
6
|
-
* subclass-of / part-of edges to page_entity peers. Heuristic (H1→QID can mis-resolve), so the
|
|
7
|
-
* findings it powers are labelled N and gated behind includeJudgement. On-demand only.
|
|
8
|
-
*/
|
|
9
3
|
export class Entities {
|
|
10
4
|
wd;
|
|
11
5
|
dataDir;
|
|
@@ -18,7 +12,6 @@ export class Entities {
|
|
|
18
12
|
const language = opts.language ?? 'en';
|
|
19
13
|
const db = new AuditDatabase(dbPathFor(this.dataDir, siteUrl));
|
|
20
14
|
try {
|
|
21
|
-
// Top indexable pages by internal authority (most worth resolving).
|
|
22
15
|
const pages = db.db.prepare(`SELECT url_key, h1, title FROM pages WHERE status_code=200 AND indexable=1 AND (h1 IS NOT NULL OR title IS NOT NULL)
|
|
23
16
|
ORDER BY ipr DESC, inlink_count DESC LIMIT ?`).all(limit);
|
|
24
17
|
const upEntity = db.db.prepare(`INSERT INTO page_entity (url_key, qid, label, description, source, fetched_at) VALUES (?,?,?,?,?,datetime('now'))
|
|
@@ -39,7 +32,6 @@ export class Entities {
|
|
|
39
32
|
}
|
|
40
33
|
update({ phase: 'resolve', attempted, resolved });
|
|
41
34
|
}
|
|
42
|
-
// Relationship edges among the resolved entity set.
|
|
43
35
|
const upEdge = db.db.prepare(`INSERT OR IGNORE INTO entity_edge (qid, related_qid, relation) VALUES (?,?,?)`);
|
|
44
36
|
let edges = 0;
|
|
45
37
|
for (const qid of qids) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Entities.js","sourceRoot":"","sources":["../../src/core/Entities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"Entities.js","sourceRoot":"","sources":["../../src/core/Entities.ts"],"names":[],"mappings":"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"}
|