/*!
 * Copyright Adaptavist 2025 (c) All rights reserved
 */
import { CopyS3ObjectRequest, CopyS3ObjectResponseOK } from './types/s3/object';
import { DeleteS3ObjectRequest, DeleteS3ObjectResponseOK } from './types/s3/object';
import { GetS3ObjectRequest, GetS3ObjectResponseOK } from './types/s3/object';
import { GetS3ObjectHeadRequest, GetS3ObjectHeadResponseOK } from './types/s3/object';
import { GetS3ObjectsV2Request, GetS3ObjectsV2ResponseOK } from './types/s3/object';
import { GetS3ObjectVersionsRequest, GetS3ObjectVersionsResponseOK } from './types/s3/object';
import { PutS3ObjectRequest, PutS3ObjectResponseOK } from './types/s3/object';
import { CreatS3BucketRequest, CreatS3BucketResponseOK } from './types/s3/bucket';
import { DeleteS3BucketRequest, DeleteS3BucketResponseOK } from './types/s3/bucket';
import { GetS3BucketHeadRequest, GetS3BucketHeadResponseOK } from './types/s3/bucket';
import { GetS3BucketsRequest, GetS3BucketsResponseOK } from './types/s3/bucket';
import { Headers, Response, BaseApiCore, ErrorStrategyOptionType, PlatformImplementation } from '@managed-api/commons-core';
import { CommonError, AdditionalErrorTypes, ErrorStrategyHandlers, ErrorStrategyOption } from './errorStrategy';
import { ErrorStrategyBuilder } from './builders/errorStrategy';
export interface AWSApiCoreOptions extends ErrorStrategyOption {
}
declare type GetGlobalErrorStrategy = () => ErrorStrategyOptionType<CommonError, AdditionalErrorTypes, ErrorStrategyHandlers, ErrorStrategyBuilder> | undefined;
export declare abstract class AWSApiCore extends BaseApiCore {
    private options?;
    S3: S3Group;
    All: AllGroup;
    constructor(options?: AWSApiCoreOptions | undefined);
    setGlobalErrorStrategy(errorStrategy: ErrorStrategyOptionType<CommonError, AdditionalErrorTypes, ErrorStrategyHandlers, ErrorStrategyBuilder>): void;
    protected buildResponse(url: string, status: number, statusText: string, headers: Headers, body?: string | ArrayBuffer): Response<any>;
    private getGlobalErrorStrategy;
}
declare class AllGroup {
    private S3;
    constructor(S3: S3Group);
    /**
     * Creates a copy of an object that is already stored in Amazon S3.
     * Alternative usage: S3.Object.copyObject
     * Documentation: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html
     * @param options Request options.
     */
    copyS3Object<T = CopyS3ObjectResponseOK>(options: CopyS3ObjectRequest): Promise<CopyS3ObjectResponseOK | T>;
    /**
     * Removes an object from a bucket.
     * Alternative usage: S3.Object.deleteObject
     * Documentation: https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html
     * @param options Request options.
     */
    deleteS3Object<T = DeleteS3ObjectResponseOK>(options: DeleteS3ObjectRequest): Promise<DeleteS3ObjectResponseOK | T>;
    /**
     * Retrieves an object from Amazon S3.
     * Alternative usage: S3.Object.getObject
     * Documentation: https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html
     * @param options Request options.
     */
    getS3Object<T = GetS3ObjectResponseOK>(options: GetS3ObjectRequest): Promise<GetS3ObjectResponseOK | T>;
    /**
     * The HEAD operation retrieves metadata from an object without returning the object itself. This operation is useful if you're interested only in an object's metadata.
     * Alternative usage: S3.Object.getObjectHead
     * Documentation: https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html
     * @param options Request options.
     */
    getS3ObjectHead<T = GetS3ObjectHeadResponseOK>(options: GetS3ObjectHeadRequest): Promise<GetS3ObjectHeadResponseOK | T>;
    /**
     * Returns some or all (up to 1,000) of the objects in a bucket with each request. You can use the request parameters as selection criteria to return a subset of the objects in a bucket. A 200 OK response can contain valid or invalid XML. Make sure to design your application to parse the contents of the response and handle it appropriately.
     * Alternative usage: S3.Object.getObjectsV2
     * Documentation: https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html
     * @param options Request options.
     */
    getS3ObjectsV2<T = GetS3ObjectsV2ResponseOK>(options: GetS3ObjectsV2Request): Promise<GetS3ObjectsV2ResponseOK | T>;
    /**
     * Returns metadata about all versions of the objects in a bucket. You can also use request parameters as selection criteria to return metadata about a subset of all the object versions.
     * Alternative usage: S3.Object.getObjectVersions
     * Documentation: https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectVersions.html
     * @param options Request options.
     */
    getS3ObjectVersions<T = GetS3ObjectVersionsResponseOK>(options: GetS3ObjectVersionsRequest): Promise<GetS3ObjectVersionsResponseOK | T>;
    /**
     * Adds an object to a bucket.
     * Alternative usage: S3.Object.putObject
     * Documentation: https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html
     * @param options Request options.
     */
    putS3Object<T = PutS3ObjectResponseOK>(options: PutS3ObjectRequest): Promise<PutS3ObjectResponseOK | T>;
    /**
     * Creates a new S3 bucket. To create a bucket, you must set up Amazon S3 and have a valid AWS Access Key ID to authenticate requests. Anonymous requests are never allowed to create buckets. By creating the bucket, you become the bucket owner.
     * Alternative usage: S3.Bucket.createBucket
     * Documentation: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html
     * @param options Request options.
     */
    createS3Bucket<T = CreatS3BucketResponseOK>(options: CreatS3BucketRequest): Promise<CreatS3BucketResponseOK | T>;
    /**
     * Deletes the S3 bucket. All objects (including all object versions and delete markers) in the bucket must be deleted before the bucket itself can be deleted.
     * Alternative usage: S3.Bucket.deleteBucket
     * Documentation: https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucket.html
     * @param options Request options.
     */
    deleteS3Bucket<T = DeleteS3BucketResponseOK>(options: DeleteS3BucketRequest): Promise<DeleteS3BucketResponseOK | T>;
    /**
     * You can use this operation to determine if a bucket exists and if you have permission to access it. The action returns a 200 OK if the bucket exists and you have permission to access it.
     * Alternative usage: S3.Bucket.getBucketHead
     * Documentation: https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadBucket.html
     * @param options Request options.
     */
    getS3BucketHead<T = GetS3BucketHeadResponseOK>(options: GetS3BucketHeadRequest): Promise<GetS3BucketHeadResponseOK | T>;
    /**
     * Returns a list of all buckets owned by the authenticated sender of the request. To grant IAM permission to use this operation, you must add the s3:ListAllMyBuckets policy action.
     * Alternative usage: S3.Bucket.getBuckets
     * Documentation: https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBuckets.html
     * @param options Request options.
     */
    getS3Buckets<T = GetS3BucketsResponseOK>(options: GetS3BucketsRequest): Promise<GetS3BucketsResponseOK | T>;
}
declare class S3Group {
    private implementation;
    private getGlobalErrorStrategy;
    Object: S3ObjectGroup;
    Bucket: S3BucketGroup;
    constructor(implementation: PlatformImplementation, getGlobalErrorStrategy: GetGlobalErrorStrategy);
}
declare class S3ObjectGroup {
    private implementation;
    private getGlobalErrorStrategy;
    constructor(implementation: PlatformImplementation, getGlobalErrorStrategy: GetGlobalErrorStrategy);
    /**
     * Creates a copy of an object that is already stored in Amazon S3.
     * Documentation: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html
     * @param options Request options.
     */
    copyObject<T = CopyS3ObjectResponseOK>(options: CopyS3ObjectRequest): Promise<CopyS3ObjectResponseOK | T>;
    /**
     * Removes an object from a bucket.
     * Documentation: https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html
     * @param options Request options.
     */
    deleteObject<T = DeleteS3ObjectResponseOK>(options: DeleteS3ObjectRequest): Promise<DeleteS3ObjectResponseOK | T>;
    /**
     * Retrieves an object from Amazon S3.
     * Documentation: https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html
     * @param options Request options.
     */
    getObject<T = GetS3ObjectResponseOK>(options: GetS3ObjectRequest): Promise<GetS3ObjectResponseOK | T>;
    /**
     * The HEAD operation retrieves metadata from an object without returning the object itself. This operation is useful if you're interested only in an object's metadata.
     * Documentation: https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html
     * @param options Request options.
     */
    getObjectHead<T = GetS3ObjectHeadResponseOK>(options: GetS3ObjectHeadRequest): Promise<GetS3ObjectHeadResponseOK | T>;
    /**
     * Returns some or all (up to 1,000) of the objects in a bucket with each request. You can use the request parameters as selection criteria to return a subset of the objects in a bucket. A 200 OK response can contain valid or invalid XML. Make sure to design your application to parse the contents of the response and handle it appropriately.
     * Documentation: https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html
     * @param options Request options.
     */
    getObjectsV2<T = GetS3ObjectsV2ResponseOK>(options: GetS3ObjectsV2Request): Promise<GetS3ObjectsV2ResponseOK | T>;
    /**
     * Returns metadata about all versions of the objects in a bucket. You can also use request parameters as selection criteria to return metadata about a subset of all the object versions.
     * Documentation: https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectVersions.html
     * @param options Request options.
     */
    getObjectVersions<T = GetS3ObjectVersionsResponseOK>(options: GetS3ObjectVersionsRequest): Promise<GetS3ObjectVersionsResponseOK | T>;
    /**
     * Adds an object to a bucket.
     * Documentation: https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html
     * @param options Request options.
     */
    putObject<T = PutS3ObjectResponseOK>(options: PutS3ObjectRequest): Promise<PutS3ObjectResponseOK | T>;
}
declare class S3BucketGroup {
    private implementation;
    private getGlobalErrorStrategy;
    constructor(implementation: PlatformImplementation, getGlobalErrorStrategy: GetGlobalErrorStrategy);
    /**
     * Creates a new S3 bucket. To create a bucket, you must set up Amazon S3 and have a valid AWS Access Key ID to authenticate requests. Anonymous requests are never allowed to create buckets. By creating the bucket, you become the bucket owner.
     * Documentation: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html
     * @param options Request options.
     */
    createBucket<T = CreatS3BucketResponseOK>(options: CreatS3BucketRequest): Promise<CreatS3BucketResponseOK | T>;
    /**
     * Deletes the S3 bucket. All objects (including all object versions and delete markers) in the bucket must be deleted before the bucket itself can be deleted.
     * Documentation: https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucket.html
     * @param options Request options.
     */
    deleteBucket<T = DeleteS3BucketResponseOK>(options: DeleteS3BucketRequest): Promise<DeleteS3BucketResponseOK | T>;
    /**
     * You can use this operation to determine if a bucket exists and if you have permission to access it. The action returns a 200 OK if the bucket exists and you have permission to access it.
     * Documentation: https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadBucket.html
     * @param options Request options.
     */
    getBucketHead<T = GetS3BucketHeadResponseOK>(options: GetS3BucketHeadRequest): Promise<GetS3BucketHeadResponseOK | T>;
    /**
     * Returns a list of all buckets owned by the authenticated sender of the request. To grant IAM permission to use this operation, you must add the s3:ListAllMyBuckets policy action.
     * Documentation: https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBuckets.html
     * @param options Request options.
     */
    getBuckets<T = GetS3BucketsResponseOK>(options: GetS3BucketsRequest): Promise<GetS3BucketsResponseOK | T>;
}
export {};
//# sourceMappingURL=index.d.ts.map