///
import { GraphQLService, SchemaChangeCallback, Unsubscriber, GraphQLServiceEngineConfig } from 'apollo-server-core';
import { GraphQLExecutionResult, Logger, GraphQLRequestContextExecutionDidStart } from 'apollo-server-types';
import { InMemoryLRUCache } from 'apollo-server-caching';
import { GraphQLSchema, GraphQLError } from 'graphql';
import { ServiceDefinition } from '@apollo/federation';
import { buildQueryPlan, buildOperationContext } from './buildQueryPlan';
import { executeQueryPlan, ServiceMap } from './executeQueryPlan';
import { CompositionMetadata } from './loadServicesFromStorage';
import { serializeQueryPlan, QueryPlan, OperationContext } from './QueryPlan';
import { GraphQLDataSource } from './datasources/types';
import { HeadersInit } from 'node-fetch';
import { fetch } from 'apollo-server-env';
export declare type ServiceEndpointDefinition = Pick;
interface GatewayConfigBase {
debug?: boolean;
logger?: Logger;
__exposeQueryPlanExperimental?: boolean;
buildService?: (definition: ServiceEndpointDefinition) => GraphQLDataSource;
experimental_didResolveQueryPlan?: Experimental_DidResolveQueryPlanCallback;
experimental_didFailComposition?: Experimental_DidFailCompositionCallback;
experimental_updateServiceDefinitions?: Experimental_UpdateServiceDefinitions;
experimental_didUpdateComposition?: Experimental_DidUpdateCompositionCallback;
experimental_pollInterval?: number;
experimental_approximateQueryPlanStoreMiB?: number;
experimental_autoFragmentization?: boolean;
fetcher?: typeof fetch;
serviceHealthCheck?: boolean;
}
interface RemoteGatewayConfig extends GatewayConfigBase {
serviceList: ServiceEndpointDefinition[];
introspectionHeaders?: HeadersInit;
}
interface ManagedGatewayConfig extends GatewayConfigBase {
federationVersion?: number;
}
interface LocalGatewayConfig extends GatewayConfigBase {
localServiceList: ServiceDefinition[];
}
export declare type GatewayConfig = RemoteGatewayConfig | LocalGatewayConfig | ManagedGatewayConfig;
declare type DataSourceMap = {
[serviceName: string]: {
url?: string;
dataSource: GraphQLDataSource;
};
};
export declare type Experimental_DidResolveQueryPlanCallback = ({ queryPlan, serviceMap, operationContext, requestContext, }: {
readonly queryPlan: QueryPlan;
readonly serviceMap: ServiceMap;
readonly operationContext: OperationContext;
readonly requestContext: GraphQLRequestContextExecutionDidStart>;
}) => void;
export declare type Experimental_DidFailCompositionCallback = ({ errors, serviceList, compositionMetadata, }: {
readonly errors: GraphQLError[];
readonly serviceList: ServiceDefinition[];
readonly compositionMetadata?: CompositionMetadata;
}) => void;
export interface Experimental_CompositionInfo {
serviceDefinitions: ServiceDefinition[];
schema: GraphQLSchema;
compositionMetadata?: CompositionMetadata;
}
export declare type Experimental_DidUpdateCompositionCallback = (currentConfig: Experimental_CompositionInfo, previousConfig?: Experimental_CompositionInfo) => void;
export declare type Experimental_UpdateServiceDefinitions = (config: GatewayConfig) => Promise<{
serviceDefinitions?: ServiceDefinition[];
compositionMetadata?: CompositionMetadata;
isNewSchema: boolean;
}>;
export declare const GCS_RETRY_COUNT = 5;
export declare function getDefaultGcsFetcher(): import("make-fetch-happen").Fetcher;
export declare const HEALTH_CHECK_QUERY = "query __ApolloServiceHealthCheck__ { __typename }";
export declare const SERVICE_DEFINITION_QUERY = "query __ApolloGetServiceDefinition__ { _service { sdl } }";
export declare class ApolloGateway implements GraphQLService {
schema?: GraphQLSchema;
protected serviceMap: DataSourceMap;
protected config: GatewayConfig;
private logger;
protected queryPlanStore?: InMemoryLRUCache;
private engineConfig;
private pollingTimer?;
private onSchemaChangeListeners;
private serviceDefinitions;
private compositionMetadata?;
private serviceSdlCache;
private warnedStates;
private fetcher;
protected experimental_didResolveQueryPlan?: Experimental_DidResolveQueryPlanCallback;
protected experimental_didFailComposition?: Experimental_DidFailCompositionCallback;
protected experimental_didUpdateComposition?: Experimental_DidUpdateCompositionCallback;
protected updateServiceDefinitions: Experimental_UpdateServiceDefinitions;
protected experimental_pollInterval?: number;
private experimental_approximateQueryPlanStoreMiB?;
constructor(config?: GatewayConfig);
load(options?: {
engine?: GraphQLServiceEngineConfig;
}): Promise<{
schema: GraphQLSchema;
executor: (requestContext: GraphQLRequestContextExecutionDidStart) => Promise;
}>;
protected updateComposition(): Promise;
serviceHealthCheck(serviceMap?: DataSourceMap): Promise<{
name: string;
response: import("apollo-server-types").GraphQLResponse;
}[]>;
protected createSchema(serviceList: ServiceDefinition[]): GraphQLSchema;
onSchemaChange(callback: SchemaChangeCallback): Unsubscriber;
private pollServices;
private createAndCacheDataSource;
private createDataSource;
protected createServices(services: ServiceEndpointDefinition[]): void;
protected loadServiceDefinitions(config: GatewayConfig): ReturnType;
executor: (requestContext: GraphQLRequestContextExecutionDidStart) => Promise;
protected validateIncomingRequest(requestContext: GraphQLRequestContextExecutionDidStart, operationContext: OperationContext): readonly GraphQLError[];
private initializeQueryPlanStore;
stop(): Promise;
}
export { buildQueryPlan, executeQueryPlan, serializeQueryPlan, buildOperationContext, QueryPlan, ServiceMap, };
export * from './datasources';
//# sourceMappingURL=index.d.ts.map