import { CfnResource, Construct, IAsset, IConstruct } from '@aws-cdk/core';
import { Grant, IGrantable, IRole } from '@aws-cdk/aws-iam';
import { TransformHostProvider } from './transform-host-provider';
export declare type AppSyncAuthMode = 'API_KEY' | 'AMAZON_COGNITO_USER_POOLS' | 'AWS_IAM' | 'OPENID_CONNECT' | 'AWS_LAMBDA';
export declare type AppSyncAuthConfiguration = {
    defaultAuthentication: AppSyncAuthConfigurationEntry;
    additionalAuthenticationProviders: Array<AppSyncAuthConfigurationEntry>;
};
export declare type AppSyncAuthConfigurationEntry = AppSyncAuthConfigurationUserPoolEntry | AppSyncAuthConfigurationAPIKeyEntry | AppSyncAuthConfigurationIAMEntry | AppSyncAuthConfigurationOIDCEntry | AppSyncAuthConfigurationLambdaEntry;
export declare type AppSyncAuthConfigurationAPIKeyEntry = {
    authenticationType: 'API_KEY';
    apiKeyConfig?: ApiKeyConfig;
};
export declare type AppSyncAuthConfigurationUserPoolEntry = {
    authenticationType: 'AMAZON_COGNITO_USER_POOLS';
    userPoolConfig?: UserPoolConfig;
};
export declare type AppSyncAuthConfigurationIAMEntry = {
    authenticationType: 'AWS_IAM';
};
export declare type AppSyncAuthConfigurationOIDCEntry = {
    authenticationType: 'OPENID_CONNECT';
    openIDConnectConfig?: OpenIDConnectConfig;
};
export declare type AppSyncAuthConfigurationLambdaEntry = {
    authenticationType: 'AWS_LAMBDA';
    lambdaAuthorizerConfig?: LambdaConfig;
};
export interface ApiKeyConfig {
    description?: string;
    apiKeyExpirationDays: number;
    apiKeyExpirationDate?: Date;
}
export interface UserPoolConfig {
    userPoolId: string;
}
export interface OpenIDConnectConfig {
    name: string;
    issuerUrl: string;
    clientId?: string;
    iatTTL?: number;
    authTTL?: number;
}
export interface LambdaConfig {
    lambdaFunction: string;
    ttlSeconds?: number;
}
export interface AppSyncFunctionConfigurationProvider extends IConstruct {
    readonly arn: string;
    readonly functionId: string;
}
export interface DataSourceOptions {
    readonly name?: string;
    readonly description?: string;
}
export interface SearchableDataSourceOptions extends DataSourceOptions {
    readonly serviceRole: IRole;
}
export declare enum TemplateType {
    INLINE = "INLINE",
    S3_LOCATION = "S3_LOCATION"
}
export interface InlineMappingTemplateProvider {
    type: TemplateType.INLINE;
    bind: (scope: Construct) => string;
    getTemplateHash: () => string;
}
export interface S3MappingTemplateProvider {
    type: TemplateType.S3_LOCATION;
    bind: (scope: Construct) => string;
    getTemplateHash: () => string;
}
export interface S3MappingFunctionCodeProvider {
    type: TemplateType.S3_LOCATION;
    bind: (scope: Construct) => IAsset;
}
export declare type MappingTemplateProvider = InlineMappingTemplateProvider | S3MappingTemplateProvider;
export interface GraphQLAPIProvider {
    readonly apiId: string;
    readonly host: TransformHostProvider;
    addToSchema: (addition: string) => void;
    addSchemaDependency: (construct: CfnResource) => boolean;
    grant: (grantee: IGrantable, resources: APIIAMResourceProvider, ...actions: string[]) => Grant;
    grantMutation: (grantee: IGrantable, ...fields: string[]) => Grant;
    grantQuery: (grantee: IGrantable, ...fields: string[]) => Grant;
    grantSubscription: (grantee: IGrantable, ...fields: string[]) => Grant;
}
export interface APIIAMResourceProvider {
    resourceArns: (api: GraphQLAPIProvider) => string[];
}
//# sourceMappingURL=graphql-api-provider.d.ts.map