import { IDatastorePaymentRecipient } from '@ulixee/platform-specification/types/IDatastoreManifest'; import Crawler from '../lib/Crawler'; import CreditsTable from '../lib/CreditsTable'; import Datastore from '../lib/Datastore'; import Extractor from '../lib/Extractor'; import Table from '../lib/Table'; export default interface IDatastoreComponents { name?: string; description?: string; id?: string; version?: string; storageEngineHost?: string; remoteDatastores?: { [source: string]: string; }; remoteDatastoreEmbeddedCredits?: { [source: string]: { id: string; secret: string; }; }; tables?: TTable & { [CreditsTable.tableName]?: CreditsTable; }; extractors?: TExtractor; crawlers?: TCrawler; payment?: IDatastorePaymentRecipient; domain?: string; affiliateId?: string; adminIdentities?: string[]; onCreated?(this: Datastore): Promise; onVersionMigrated?(this: Datastore, previousVersion: Datastore): Promise; authenticateIdentity?(identity: string, nonce: string): Promise | boolean; } export type TExtractors = T extends Record ? { [K in keyof T]: T[K]; } : never; export type TTables = T extends Record ? { [K in keyof T]: T[K]; } : never; export type TCrawlers = T extends Record ? { [K in keyof T]: T[K]; } : never;