import { MetadataVersion } from "./constants";
import { S3Client } from "@aws-sdk/client-s3";
import { ClassType } from "jackson-js/dist/@types";
import Context from "../context/context";
export declare class ExtendedMessageMetadata {
    version: MetadataVersion;
    schema: Map<string, any>;
    tags: Map<string, any>;
    references: Map<string, string>;
    constructor(version: MetadataVersion);
    addSchema(key: string, value: any): void;
    addTags(key: string, value: any): void;
    addReference(key: string, value: string): void;
    getSchemaKeys(): Array<string>;
    getSchemaEntries(key: string): Array<string>;
    getTags(key: string): any;
    getReference(key: string): string | undefined;
}
export interface ExtendedPayload {
    reference: string;
    data: any;
}
export interface ExtendedMessagePutOutput {
    bucket: string;
    metadataReference: string;
}
export interface ExtendedMessageManagerConfig {
    bucket: string;
    region: string;
}
export declare class ExtendedMessageManager {
    s3: S3Client;
    bucket: string;
    constructor(config: ExtendedMessageManagerConfig);
    private getRaw;
    getRawString(ctx: Context, bucket: string, reference: string): Promise<Error | undefined | string>;
    getRawBytes(ctx: Context, bucket: string, reference: string): Promise<Error | undefined | Uint8Array>;
    get<T>(ctx: Context, creatorClass: ClassType<any>, bucket: string, reference: string, isArray?: boolean): Promise<Error | T | undefined>;
    put(ctx: Context, metadataReference: string, metadata: ExtendedMessageMetadata, payloads: Array<ExtendedPayload>): Promise<ExtendedMessagePutOutput | undefined>;
}
