@houtini/seo-audit-console 0.8.0 → 0.9.1
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 +308 -306
- package/dist/audit/checks.d.ts +0 -7
- package/dist/audit/checks.d.ts.map +1 -1
- package/dist/audit/checks.js +130 -242
- 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 +0 -74
- package/dist/core/DataForSeoClient.d.ts.map +1 -1
- package/dist/core/DataForSeoClient.js +1 -72
- 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.js +16 -166
- package/dist/server.js.map +1 -1
- package/package.json +2 -2
- package/server.json +2 -2
|
@@ -1,16 +1,3 @@
|
|
|
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;
|
|
@@ -22,28 +9,14 @@ export declare class DataForSeoClient {
|
|
|
22
9
|
private readonly cache;
|
|
23
10
|
private chain;
|
|
24
11
|
constructor(login: string, password: string, cacheDbPath: string, ttlDays?: number);
|
|
25
|
-
/** Serialise live work — only one request in flight at any time (singular worker). */
|
|
26
12
|
private serialize;
|
|
27
13
|
private keyFor;
|
|
28
|
-
/** POST to a DataForSEO endpoint, served from the 7-day cache when fresh. */
|
|
29
14
|
call(endpoint: string, body: unknown[], timeoutMs?: number): Promise<DfsResponse>;
|
|
30
|
-
/** Build the location field — numeric → location_code, string → location_name, else US default. */
|
|
31
15
|
private loc;
|
|
32
|
-
/** KEYWORDS_DATA — true monthly search volume + CPC + competition (cheap). */
|
|
33
16
|
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
17
|
serpOrganic(keyword: string, location?: string | number, languageCode?: string, depth?: number, opts?: {
|
|
41
18
|
loadAsyncAiOverview?: boolean;
|
|
42
19
|
}): 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
20
|
serpYoutube(keyword: string, location?: string | number, languageCode?: string, blockDepth?: number): Promise<{
|
|
48
21
|
videos: Array<{
|
|
49
22
|
rank: number | null;
|
|
@@ -61,9 +34,6 @@ export declare class DataForSeoClient {
|
|
|
61
34
|
cached: boolean;
|
|
62
35
|
cost: number;
|
|
63
36
|
}>;
|
|
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
37
|
serpNews(keyword: string, location?: string | number, languageCode?: string, depth?: number): Promise<{
|
|
68
38
|
articles: Array<{
|
|
69
39
|
rank: number | null;
|
|
@@ -77,11 +47,6 @@ export declare class DataForSeoClient {
|
|
|
77
47
|
cached: boolean;
|
|
78
48
|
cost: number;
|
|
79
49
|
}>;
|
|
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
50
|
googleTrends(keywords: string[], location?: string | number, languageCode?: string, opts?: {
|
|
86
51
|
timeRange?: string;
|
|
87
52
|
type?: string;
|
|
@@ -95,60 +60,21 @@ export declare class DataForSeoClient {
|
|
|
95
60
|
cached: boolean;
|
|
96
61
|
cost: number;
|
|
97
62
|
}>;
|
|
98
|
-
/**
|
|
99
|
-
* Related terms for a keyword — People Also Ask questions + related searches,
|
|
100
|
-
* parsed from the SERP advanced response. Powers the click-through "related
|
|
101
|
-
* terms" on the keyword charts. Cached 7 days via the underlying SERP call.
|
|
102
|
-
*/
|
|
103
63
|
relatedTerms(keyword: string, location?: string | number, languageCode?: string): Promise<{
|
|
104
64
|
peopleAlsoAsk: string[];
|
|
105
65
|
relatedSearches: string[];
|
|
106
66
|
cached: boolean;
|
|
107
67
|
cost: number;
|
|
108
68
|
}>;
|
|
109
|
-
/** Labs — domain ranking distribution over time (monthly). The over-time sequence. */
|
|
110
69
|
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
70
|
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
71
|
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
72
|
backlinksSummary(target: string): Promise<DfsResponse>;
|
|
121
|
-
/** Backlinks — per-page backlink/referring-domain counts for a domain (top pages by backlinks). */
|
|
122
73
|
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
74
|
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
75
|
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
76
|
lighthouse(url: string, forMobile?: boolean, languageCode?: string): Promise<DfsResponse>;
|
|
145
|
-
/** Labs — competitor domains by organic keyword overlap (discovery seed for gap analysis). */
|
|
146
77
|
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
78
|
pageIntersection(competitorUrls: string[], excludeUrls: string[], location?: string | number, languageCode?: string, limit?: number): Promise<DfsResponse>;
|
|
153
79
|
cacheStats(): {
|
|
154
80
|
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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"}
|
|
@@ -26,20 +26,17 @@ export class DataForSeoClient {
|
|
|
26
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,16 +63,12 @@ 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
|
|
@@ -90,27 +81,18 @@ export class DataForSeoClient {
|
|
|
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,11 +141,6 @@ 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);
|
|
176
146
|
const r = await this.call('/v3/keywords_data/google_trends/explore/live', [
|
|
@@ -190,11 +160,6 @@ export class DataForSeoClient {
|
|
|
190
160
|
}));
|
|
191
161
|
return { series, keywords: kw, cached: r.cached, cost: r.cost };
|
|
192
162
|
}
|
|
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
163
|
async relatedTerms(keyword, location, languageCode = 'en') {
|
|
199
164
|
const r = await this.serpOrganic(keyword, location, languageCode, 30);
|
|
200
165
|
const items = r.tasks[0]?.result?.[0]?.items ?? [];
|
|
@@ -217,13 +182,11 @@ export class DataForSeoClient {
|
|
|
217
182
|
}
|
|
218
183
|
return { peopleAlsoAsk, relatedSearches, cached: r.cached, cost: r.cost };
|
|
219
184
|
}
|
|
220
|
-
/** Labs — domain ranking distribution over time (monthly). The over-time sequence. */
|
|
221
185
|
async historicalRankOverview(target, location, languageCode = 'en', languageName) {
|
|
222
186
|
return this.call('/v3/dataforseo_labs/google/historical_rank_overview/live', [
|
|
223
187
|
{ target, ...this.loc(location), ...(languageName ? { language_name: languageName } : { language_code: languageCode }) },
|
|
224
188
|
]);
|
|
225
189
|
}
|
|
226
|
-
/** Labs — a domain's top ranking pages by estimated organic traffic (relevant_pages). */
|
|
227
190
|
async relevantPages(target, location, languageCode = 'en', limit = 25) {
|
|
228
191
|
return this.call('/v3/dataforseo_labs/google/relevant_pages/live', [
|
|
229
192
|
{
|
|
@@ -236,14 +199,7 @@ export class DataForSeoClient {
|
|
|
236
199
|
},
|
|
237
200
|
]);
|
|
238
201
|
}
|
|
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
202
|
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
203
|
const body = {
|
|
248
204
|
target,
|
|
249
205
|
...this.loc(location),
|
|
@@ -255,25 +211,14 @@ export class DataForSeoClient {
|
|
|
255
211
|
body.filters = filters;
|
|
256
212
|
return this.call('/v3/dataforseo_labs/google/ranked_keywords/live', [body]);
|
|
257
213
|
}
|
|
258
|
-
/** Backlinks — overall profile for a domain (total backlinks, referring domains, spam). Cheap. */
|
|
259
214
|
async backlinksSummary(target) {
|
|
260
215
|
return this.call('/v3/backlinks/summary/live', [{ target, internal_list_limit: 1, backlinks_status_type: 'live' }]);
|
|
261
216
|
}
|
|
262
|
-
/** Backlinks — per-page backlink/referring-domain counts for a domain (top pages by backlinks). */
|
|
263
217
|
async domainPagesSummary(target, limit = 1000) {
|
|
264
218
|
return this.call('/v3/backlinks/domain_pages_summary/live', [
|
|
265
219
|
{ target, limit: Math.min(limit, 1000), order_by: ['backlinks,desc'], backlinks_status_type: 'live' },
|
|
266
220
|
]);
|
|
267
221
|
}
|
|
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
222
|
async domainIntersection(targets, excludeTarget, limit = 300) {
|
|
278
223
|
const targetMap = {};
|
|
279
224
|
targets.slice(0, 20).forEach((t, i) => { targetMap[String(i + 1)] = t; });
|
|
@@ -287,35 +232,19 @@ export class DataForSeoClient {
|
|
|
287
232
|
body.exclude_targets = [excludeTarget];
|
|
288
233
|
return this.call('/v3/backlinks/domain_intersection/live', [body]);
|
|
289
234
|
}
|
|
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
235
|
async searchIntent(keywords, languageCode = 'en') {
|
|
296
236
|
return this.call('/v3/dataforseo_labs/google/search_intent/live', [
|
|
297
237
|
{ keywords: keywords.slice(0, 1000), language_code: languageCode },
|
|
298
238
|
]);
|
|
299
239
|
}
|
|
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
240
|
async lighthouse(url, forMobile = true, languageCode = 'en') {
|
|
306
241
|
return this.call('/v3/on_page/lighthouse/live/json', [{ url, for_mobile: forMobile, language_code: languageCode, categories: ['performance', 'seo', 'best_practices', 'accessibility'] }], 120000);
|
|
307
242
|
}
|
|
308
|
-
/** Labs — competitor domains by organic keyword overlap (discovery seed for gap analysis). */
|
|
309
243
|
async competitorsDomain(target, location, languageCode = 'en', limit = 20) {
|
|
310
244
|
return this.call('/v3/dataforseo_labs/google/competitors_domain/live', [
|
|
311
245
|
{ target, ...this.loc(location), language_code: languageCode, limit: Math.min(limit, 1000), exclude_top_domains: true },
|
|
312
246
|
]);
|
|
313
247
|
}
|
|
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
248
|
async pageIntersection(competitorUrls, excludeUrls, location, languageCode = 'en', limit = 100) {
|
|
320
249
|
const pages = {};
|
|
321
250
|
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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"}
|
|
@@ -1,15 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Firecrawl client for scraping THIRD-PARTY (competitor) pages during content recon.
|
|
3
|
-
* Owned pages use our own crawler; competitor pages use Firecrawl.
|
|
4
|
-
*
|
|
5
|
-
* NB the API vs MCP divergence: the raw v2 API nests the result under `.data`
|
|
6
|
-
* ({ success, data: { markdown, metadata } }) whereas the Firecrawl MCP flattens it.
|
|
7
|
-
* We code against the API and read `json.data`.
|
|
8
|
-
*
|
|
9
|
-
* A small SQLite cache (default 7 days) avoids re-scraping the same competitor URL
|
|
10
|
-
* across a batch or a re-run — competitor pages don't change minute to minute, and it
|
|
11
|
-
* keeps recon cheap and polite.
|
|
12
|
-
*/
|
|
13
1
|
export interface ScrapeResult {
|
|
14
2
|
url: string;
|
|
15
3
|
markdown: string;
|
|
@@ -22,13 +10,7 @@ export declare class FirecrawlClient {
|
|
|
22
10
|
private readonly cache;
|
|
23
11
|
private chain;
|
|
24
12
|
constructor(apiKey: string, cacheDbPath: string, ttlDays?: number);
|
|
25
|
-
/** Serialise live scrapes — polite, and keeps us within rate limits. */
|
|
26
13
|
private serialize;
|
|
27
|
-
/** Scrape one URL to clean markdown (main content only). Cached for the TTL.
|
|
28
|
-
* proxy (v2 enum: basic | enhanced | auto — 'stealth' was the v1 name and is rejected):
|
|
29
|
-
* 'auto' retries with enhanced proxies when basic is blocked, billed at up to 5 credits.
|
|
30
|
-
* maxAge is Firecrawl's OWN cache (default 2 days) — we pass it explicitly so the freshness
|
|
31
|
-
* of a competitor page is a declared choice rather than a silent default. */
|
|
32
14
|
scrape(url: string, opts?: {
|
|
33
15
|
maxChars?: number;
|
|
34
16
|
timeoutMs?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FirecrawlClient.d.ts","sourceRoot":"","sources":["../../src/core/FirecrawlClient.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FirecrawlClient.d.ts","sourceRoot":"","sources":["../../src/core/FirecrawlClient.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;CACjB;AAID,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;IAC1C,OAAO,CAAC,KAAK,CAAuC;gBAExC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,SAAI;IAkB5D,OAAO,CAAC,SAAS;IAWX,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,YAAY,CAAC;CAkDjK"}
|
|
@@ -24,17 +24,11 @@ export class FirecrawlClient {
|
|
|
24
24
|
);
|
|
25
25
|
`);
|
|
26
26
|
}
|
|
27
|
-
/** Serialise live scrapes — polite, and keeps us within rate limits. */
|
|
28
27
|
serialize(fn) {
|
|
29
28
|
const result = this.chain.then(fn, fn);
|
|
30
29
|
this.chain = result.then(() => undefined, () => undefined);
|
|
31
30
|
return result;
|
|
32
31
|
}
|
|
33
|
-
/** Scrape one URL to clean markdown (main content only). Cached for the TTL.
|
|
34
|
-
* proxy (v2 enum: basic | enhanced | auto — 'stealth' was the v1 name and is rejected):
|
|
35
|
-
* 'auto' retries with enhanced proxies when basic is blocked, billed at up to 5 credits.
|
|
36
|
-
* maxAge is Firecrawl's OWN cache (default 2 days) — we pass it explicitly so the freshness
|
|
37
|
-
* of a competitor page is a declared choice rather than a silent default. */
|
|
38
32
|
async scrape(url, opts = {}) {
|
|
39
33
|
const key = createHash('sha256').update('scrape\n' + url).digest('hex');
|
|
40
34
|
const row = this.cache
|
|
@@ -51,7 +45,7 @@ export class FirecrawlClient {
|
|
|
51
45
|
body: JSON.stringify({
|
|
52
46
|
url, formats: ['markdown'], onlyMainContent: true,
|
|
53
47
|
proxy: opts.proxy ?? 'auto',
|
|
54
|
-
maxAge: opts.maxAgeMs ?? 172800000,
|
|
48
|
+
maxAge: opts.maxAgeMs ?? 172800000,
|
|
55
49
|
}),
|
|
56
50
|
signal: AbortSignal.timeout(opts.timeoutMs ?? 45000),
|
|
57
51
|
});
|
|
@@ -59,18 +53,12 @@ export class FirecrawlClient {
|
|
|
59
53
|
if (!res.ok || json?.success === false) {
|
|
60
54
|
throw new Error(`Firecrawl scrape failed for ${url}: ${res.status} ${json?.error ?? ''}`.trim());
|
|
61
55
|
}
|
|
62
|
-
// API nests under .data (MCP flattens it — we read the API shape here).
|
|
63
56
|
const data = json.data ?? json;
|
|
64
|
-
// A success:true response can still carry the TARGET's error status (403/404/challenge page):
|
|
65
|
-
// metadata.statusCode is the page's, not Firecrawl's. Treat 4xx/5xx as a failure so the
|
|
66
|
-
// caller falls back to the browser-profile fetch instead of diffing a block page.
|
|
67
57
|
const pageStatus = Number(data.metadata?.statusCode);
|
|
68
58
|
if (Number.isFinite(pageStatus) && pageStatus >= 400) {
|
|
69
59
|
throw new Error(`Firecrawl got ${pageStatus} for ${url}${data.metadata?.error ? `: ${data.metadata.error}` : ''}`);
|
|
70
60
|
}
|
|
71
61
|
const markdown = data.markdown ?? '';
|
|
72
|
-
// metadata.title is oneOf string | string[] in the v2 schema — an array would throw on bind
|
|
73
|
-
// ("can only bind numbers, strings, ...") when cached. Normalise to a single string.
|
|
74
62
|
const rawTitle = data.metadata?.title;
|
|
75
63
|
const title = Array.isArray(rawTitle) ? (rawTitle[0] ?? null) : (rawTitle ?? null);
|
|
76
64
|
this.cache
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FirecrawlClient.js","sourceRoot":"","sources":["../../src/core/FirecrawlClient.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,MAAM,QAAQ,GAAG,2BAA2B,CAAC;AAE7C,MAAM,OAAO,eAAe;IACT,MAAM,CAAS;IACf,KAAK,CAAS;IACd,KAAK,CAAoB;IAClC,KAAK,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAC;IAEpD,YAAY,MAAc,EAAE,WAAmB,EAAE,OAAO,GAAG,CAAC;QAC1D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;QAChC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,KAAK,GAAG,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;;;;;;;;KAQf,CAAC,CAAC;IACL,CAAC;
|
|
1
|
+
{"version":3,"file":"FirecrawlClient.js","sourceRoot":"","sources":["../../src/core/FirecrawlClient.ts"],"names":[],"mappings":"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"}
|
package/dist/core/GscClient.d.ts
CHANGED
|
@@ -4,19 +4,12 @@ export interface PageResult {
|
|
|
4
4
|
totalSoFar: number;
|
|
5
5
|
startRow: number;
|
|
6
6
|
}
|
|
7
|
-
/** Thin googleapis wrapper for Search Console (ported from better-search-console). */
|
|
8
7
|
export declare class GscClient {
|
|
9
8
|
private auth;
|
|
10
9
|
private searchconsole;
|
|
11
10
|
constructor(credentialsPath: string);
|
|
12
11
|
listProperties(): Promise<GscProperty[]>;
|
|
13
|
-
/** URL Inspection API — authoritative per-URL index status. Quota-limited (~2k/day). */
|
|
14
12
|
inspectUrl(siteUrl: string, inspectionUrl: string): Promise<any>;
|
|
15
|
-
/**
|
|
16
|
-
* Fetch search analytics, streaming each 25k-row page to `onPage` so callers
|
|
17
|
-
* commit to the DB immediately instead of buffering everything in memory.
|
|
18
|
-
* Returns the total row count.
|
|
19
|
-
*/
|
|
20
13
|
fetchSearchAnalytics(siteUrl: string, options: FetchOptions, signal?: AbortSignal, onPage?: (page: PageResult) => void): Promise<number>;
|
|
21
14
|
}
|
|
22
15
|
//# sourceMappingURL=GscClient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GscClient.d.ts","sourceRoot":"","sources":["../../src/core/GscClient.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA4BvE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;
|
|
1
|
+
{"version":3,"file":"GscClient.d.ts","sourceRoot":"","sources":["../../src/core/GscClient.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA4BvE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAGD,qBAAa,SAAS;IACpB,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,aAAa,CAAM;gBAEf,eAAe,EAAE,MAAM;IAQ7B,cAAc,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAOxC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAYhE,oBAAoB,CACxB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,EACrB,MAAM,CAAC,EAAE,WAAW,EACpB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,GAClC,OAAO,CAAC,MAAM,CAAC;CA4CnB"}
|