import { AmplifyS3ResourceTemplate } from '@aws-amplify/cli-extensibility-helper';
import * as iamCdk from 'aws-cdk-lib/aws-iam';
import * as lambdaCdk from 'aws-cdk-lib/aws-lambda';
import * as s3Cdk from 'aws-cdk-lib/aws-s3';
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import { $TSAny, $TSContext, $TSObject } from '@aws-amplify/amplify-cli-core';
import { GroupAccessType, S3PermissionType, S3TriggerPrefixType, S3UserInputs, S3UserInputTriggerFunctionParams } from '../service-walkthrough-types/s3-user-input-types';
import { S3CFNDependsOn } from '../service-walkthroughs/s3-user-input-state';
import { AmplifyCfnParamType, AmplifyResourceCfnStack, AmplifyS3ResourceInputParameters } from './types';
export declare class AmplifyS3ResourceCfnStack extends AmplifyResourceCfnStack implements AmplifyS3ResourceTemplate {
    id: string;
    scope: Construct;
    s3Bucket: s3Cdk.CfnBucket;
    s3BucketName: string;
    notificationConfiguration: s3Cdk.CfnBucket.NotificationConfigurationProperty;
    triggerLambdaPermissions?: lambdaCdk.CfnPermission;
    adminTriggerLambdaPermissions?: lambdaCdk.CfnPermission;
    authResourceName: string;
    authIAMPolicy: iamCdk.PolicyDocument;
    guestIAMPolicy: iamCdk.PolicyDocument;
    groupIAMPolicy: iamCdk.PolicyDocument;
    conditions: AmplifyS3Conditions;
    parameters: AmplifyS3CfnParameters;
    s3AuthPublicPolicy?: iamCdk.CfnPolicy;
    s3AuthProtectedPolicy?: iamCdk.CfnPolicy;
    s3AuthPrivatePolicy?: iamCdk.CfnPolicy;
    s3AuthUploadPolicy?: iamCdk.CfnPolicy;
    s3AuthReadPolicy?: iamCdk.CfnPolicy;
    s3GuestPublicPolicy?: iamCdk.CfnPolicy;
    s3GuestUploadPolicy?: iamCdk.CfnPolicy;
    s3GuestReadPolicy?: iamCdk.CfnPolicy;
    s3GroupPolicyList?: Array<iamCdk.CfnPolicy>;
    s3TriggerPolicy?: iamCdk.CfnPolicy;
    s3DependsOnResources: Array<S3CFNDependsOn>;
    _props: S3UserInputs;
    _cfnInputParams: AmplifyS3ResourceInputParameters;
    constructor(scope: Construct, s3ResourceName: string, props: S3UserInputs, cfnInputParams: AmplifyS3ResourceInputParameters);
    private getGroupListFromProps;
    getS3ResourceFriendlyName(): string;
    getS3BucketName(): string;
    getS3DependsOn(): Array<S3CFNDependsOn> | undefined;
    private _addNotificationsLambdaConfigurations;
    private configureTriggerPolicy;
    _conditionallyBuildTriggerLambdaParams(triggerFunction: string): S3UserInputTriggerFunctionParams;
    generateCfnStackResources(context: $TSContext): Promise<void>;
    addGroupParams(authResourceName: string): AmplifyS3CfnParameters | undefined;
    private createTriggerLambdaCFNParams;
    addParameters(): void;
    addConditions(): AmplifyS3Conditions;
    addOutputs(): void;
    emptyNotificationsConfiguration: () => $TSAny;
    buildBucketName(): string;
    isAmplifyStackLegacy: () => boolean;
    buildCORSRules: () => s3Cdk.CfnBucket.CorsConfigurationProperty;
    buildNotificationLambdaConfiguration(): s3Cdk.CfnBucket.LambdaConfigurationProperty[];
    filterRuleAppendRegionToLambdaTriggerPrefix: (triggerPrefix: S3TriggerPrefixType) => $TSAny;
    filterRulePlainStringLambdaTriggerPrefix: (triggerPrefix: S3TriggerPrefixType) => $TSAny;
    buildTriggerPrefixRule: (triggerPrefix: S3TriggerPrefixType) => $TSAny;
    buildLambdaConfigFromTriggerParams(functionParams: S3UserInputTriggerFunctionParams): s3Cdk.CfnBucket.LambdaConfigurationProperty[];
    createAndSetIAMPolicies: () => void;
    createS3IAMPolicyDocument: (refStr: string, pathStr: string, actionStr: string, effect: iamCdk.Effect) => iamCdk.PolicyDocument;
    createMultiStatementIAMPolicyDocument: (policyStatements: Array<IAmplifyIamPolicyStatementParams>) => iamCdk.PolicyDocument;
    createInvokeFunctionS3Permission(logicalId: string, triggerFunctionName: string): lambdaCdk.CfnPermission;
    createS3AuthPublicPolicy: () => iamCdk.CfnPolicy;
    createS3AuthProtectedPolicy: () => iamCdk.CfnPolicy;
    createS3AuthPrivatePolicy: () => iamCdk.CfnPolicy;
    createS3AuthUploadPolicy: () => iamCdk.CfnPolicy;
    createS3GuestPublicPolicy: () => iamCdk.CfnPolicy;
    createGuestUploadsPolicy: () => iamCdk.CfnPolicy;
    createS3AuthReadPolicy: () => iamCdk.CfnPolicy;
    createS3GuestReadPolicy: () => iamCdk.CfnPolicy;
    private createTriggerPolicyDefinition;
    addFunctionToTriggerPolicyDefinition: (policyDefinition: IAmplifyPolicyDefinition, functionName: string) => IAmplifyPolicyDefinition;
    createTriggerPolicyFromPolicyDefinition: (policyDefinition: IAmplifyPolicyDefinition) => iamCdk.CfnPolicy;
    buildResourceFromPolicyDefinition: (policyDefinitionStatement: IAmplifyIamPolicyStatementParams) => $TSAny;
    buildActionFromPolicyDefinition: (policyDefinitionStatement: IAmplifyIamPolicyStatementParams, IsActionRef: boolean) => $TSAny;
    createIAMPolicy(policyDefinition: IAmplifyPolicyDefinition, actionRef: boolean): iamCdk.CfnPolicy;
    createMultiStatementIAMPolicy: (policyDefinition: IAmplifyPolicyDefinition) => iamCdk.CfnPolicy;
    createS3AmplifyGroupPolicies(authResourceName: string, groupList: string[], groupPolicyMap: GroupAccessType): Array<iamCdk.CfnPolicy>;
    buildGroupPolicyLogicalID: (groupName: string) => string;
    buildGroupPolicyName: (groupName: string) => string;
    buildGroupRoleName: (groupName: string) => string;
    buildCDKGroupRoles: (groupName: string, authResourceName: string) => string[];
    _buildCDKGroupPolicyStatements: (groupPerms: S3PermissionType[]) => iamCdk.PolicyStatement[];
    _buildCDKGroupPolicyDocument: (policyStatementList: iamCdk.PolicyStatement[]) => iamCdk.PolicyDocument;
    _setCFNParams: (paramDefinitions: AmplifyCfnParamType) => void;
    buildS3DependsOnFunctionCfn: (functionName: string) => S3CFNDependsOn;
    buildS3DependsOnUserPoolIdCfn: (authResourceName: string) => S3CFNDependsOn;
    buildS3DependsOnUserPoolGroupRoleListCfn: (selectedUserPoolGroupList: Array<string>) => Array<S3CFNDependsOn>;
}
export interface IAmplifyIamPolicyStatementParams {
    refStr: string;
    conditions?: $TSObject;
    pathStr?: string;
    isActionAbsolute?: boolean;
    actions?: Array<string>;
    effect: iamCdk.Effect;
}
interface IAmplifyPolicyDefinition {
    logicalId: string;
    isPolicyNameAbsolute?: boolean;
    policyNameRef: string;
    roleRefs: Array<string>;
    condition?: cdk.CfnCondition;
    statements: Array<IAmplifyIamPolicyStatementParams>;
    dependsOn?: Array<cdk.CfnResource>;
}
type AmplifyS3Conditions = Record<string, cdk.CfnCondition>;
type AmplifyS3CfnParameters = Record<string, cdk.CfnParameter>;
export {};
//# sourceMappingURL=s3-stack-builder.d.ts.map