import { ExtractSchemaType } from '@ulixee/schema'; import IExtractorComponents from '../interfaces/IExtractorComponents'; import IExtractorContext from '../interfaces/IExtractorContext'; import { IExtractorPluginConstructor } from '../interfaces/IExtractorPluginStatics'; import IExtractorSchema from '../interfaces/IExtractorSchema'; import DatastoreApiClient, { IDatastoreExecRelayArgs } from './DatastoreApiClient'; import Extractor from './Extractor'; export interface IPassthroughExtractorComponents, TExtractorName extends string, TSchema extends IExtractorSchema = IExtractorSchema, TContext extends IExtractorContext & IDatastoreExecRelayArgs = IExtractorContext & IDatastoreExecRelayArgs> { remoteExtractor: `${keyof TRemoteSources & string}.${TExtractorName}`; upcharge?: bigint | number; onRequest?: (context: TContext) => Promise; onResponse?: (context: TContext & { stream: AsyncIterable>; }) => Promise; } export default class PassthroughExtractor, TExtractorName extends string, TSchema extends IExtractorSchema = IExtractorSchema, TPlugin1 extends IExtractorPluginConstructor = IExtractorPluginConstructor, TPlugin2 extends IExtractorPluginConstructor = IExtractorPluginConstructor, TPlugin3 extends IExtractorPluginConstructor = IExtractorPluginConstructor, TOutput extends ExtractSchemaType = ExtractSchemaType, TContext extends IExtractorContext & IDatastoreExecRelayArgs = IExtractorContext & TPlugin1['contextAddons'] & TPlugin2['contextAddons'] & TPlugin3['contextAddons'] & IDatastoreExecRelayArgs> extends Extractor { readonly remoteSource: string; readonly remoteExtractor: string; remoteDatastoreId: string; remoteVersion: string; remoteDomain: string; protected upstreamClient: DatastoreApiClient; protected readonly passThroughComponents: IPassthroughExtractorComponents; constructor(components: Pick, 'name' | 'description' | 'schema'> & IPassthroughExtractorComponents & TPlugin1['componentAddons'] & TPlugin2['componentAddons'] & TPlugin3['componentAddons'], ...plugins: [plugin1?: TPlugin1, plugin2?: TPlugin2, plugin3?: TPlugin3]); protected run(context: TContext): Promise; protected injectRemoteClient(): Promise; }