import type { SeoEgressGuard } from "../egress.js"; import type { SeoQuotaGovernor } from "../quota-governor.js"; import type { HttpClient } from "../adapters/http.js"; import type { SeoDataSource, SeoCapability, SearchAnalyticsQuery, SearchAnalyticsRow, UrlInspectionQuery, UrlInspectionRow, SerpQuery, SerpRow, KeywordQuery, KeywordRow, BacklinkQuery, BacklinkRow, AiVisibilityQuery, AiVisibilityRow, LinkGraphQuery, LinkGraphRow } from "../data-source.js"; import type { DataOutcome } from "../types.js"; /** * Live DataForSEO `SeoDataSource`. Serves `serp` + `keywords` + `backlinks`; * `search-analytics`/`url-inspection` are NOT DataForSEO capabilities * (`{ kind: "disabled" }` unconditionally — GscAdapter serves those). * * bober: no OAuth/refresh flow here — the HTTP Basic credential is injected * fully-formed via `getBasicAuth`; add credential rotation only if a * credential store is wired in a later sprint. */ export declare class DataForSeoAdapter implements SeoDataSource { private readonly egress; private readonly governor; private readonly http; private readonly getBasicAuth; constructor(egress: SeoEgressGuard, governor: SeoQuotaGovernor, http?: HttpClient, getBasicAuth?: () => Promise); capabilities(): SeoCapability[]; /** * SERP query. ADR-5 preamble (egress gate, then quota gate) runs before * any network work; USD cost is the fixed per-task price for `q.priority` * (default `"standard"`) — booked in `admit()` (estimate) and `record()` * (actual, identical since SERP is a fixed-price task, sc-9-3). */ serp(q: SerpQuery): Promise>; /** * Keyword ideas query. Same ADR-5 preamble as `serp`; USD cost uses the * documented `KEYWORDS_TASK_USD` placeholder (research §4 does not pin a * keywords price — see the constant's `bober:` comment). */ keywords(q: KeywordQuery): Promise>; /** * Backlinks query. Same ADR-5 preamble; USD cost is `$0.02/req` plus * `$0.00003/row` — `admit()` uses the worst-case `q.limit` estimate, * `record()`/`provenance.costUsd` use the ACTUAL returned row count. */ backlinks(q: BacklinkQuery): Promise>; searchAnalytics(_q: SearchAnalyticsQuery): Promise>; urlInspection(_q: UrlInspectionQuery): Promise>; aiVisibility(_q: AiVisibilityQuery): Promise>; linkGraph(_q: LinkGraphQuery): Promise>; } //# sourceMappingURL=dataforseo-adapter.d.ts.map