import type { ScienceCacheIdentity, ScienceGetRequest, ScienceSearchRequest, ScienceWork } from "../../capabilities/science.js"; import type { ProviderCapability, ProviderContext } from "../types.js"; import { type OpenalexTransportDeps } from "./client.js"; import { createOpenalexDiagnosticsCapability } from "./diagnostics.js"; /** Local science search contract — see the module header. */ interface OpenalexScienceSearchCapability { validate(request: ScienceSearchRequest): void; cacheIdentity(request: ScienceSearchRequest): ScienceCacheIdentity; invoke(request: ScienceSearchRequest, signal?: AbortSignal): Promise; } /** Local science get contract — see the module header. */ interface OpenalexScienceGetCapability { validate(request: ScienceGetRequest): void; cacheIdentity(request: ScienceGetRequest): ScienceCacheIdentity; invoke(request: ScienceGetRequest, signal?: AbortSignal): Promise; } /** Local ScienceCapability surface. */ interface OpenalexScienceCapability { readonly search: OpenalexScienceSearchCapability; readonly get: OpenalexScienceGetCapability; } /** * Dependencies the OpenAlex Adapter accepts. The unified `transport` * seam carries `fetch` and timer injection (house spider/linkup * pattern); credentials flow through `create({ env })`, never here. */ export interface OpenalexAdapterDependencies { readonly transport?: OpenalexTransportDeps; } /** Local Adapter contract — see the module header. */ interface OpenalexAdapter { readonly id: "openalex"; readonly science: OpenalexScienceCapability; readonly diagnostics: ReturnType; } /** Local Descriptor contract — see the module header. */ interface OpenalexDescriptor { readonly id: "openalex"; isConfigured(env: NodeJS.ProcessEnv, capabilityId?: ProviderCapability): boolean; capabilities(): ReadonlySet; create(context: ProviderContext): OpenalexAdapter; readonly credentialEnvVars: readonly string[]; } /** * Build the OpenAlex Provider Descriptor. Keyless-by-default with an * optional upgrade key: `isConfigured` is true for the no-capability * form (doctor) and the science trio + diagnostics — never `quota` or * non-science capabilities. `create()` is side-effect-free; transport * and credential resolution run per capability call. */ export declare function createOpenalexDescriptor(dependencies?: OpenalexAdapterDependencies): OpenalexDescriptor; export {}; //# sourceMappingURL=adapter.d.ts.map