import { StreamID } from '@streamr/utils';
import { Identity } from '../identity/Identity';
import { StreamRegistry } from '../contracts/StreamRegistry';
import { StreamMessage } from '../protocol/StreamMessage';
import { MessageSigner } from '../signature/MessageSigner';
import { SignatureValidator } from '../signature/SignatureValidator';
import { GroupKeyQueue } from './GroupKeyQueue';
import { PublishMetadata } from './Publisher';
import { StreamrClientConfig } from '../Config';
export interface MessageFactoryOptions {
    streamId: StreamID;
    identity: Identity;
    streamRegistry: Pick<StreamRegistry, 'getStreamMetadata' | 'hasPublicSubscribePermission' | 'isStreamPublisher' | 'invalidatePermissionCaches'>;
    groupKeyQueue: GroupKeyQueue;
    signatureValidator: SignatureValidator;
    messageSigner: MessageSigner;
    config: Pick<StreamrClientConfig, 'encryption'>;
}
export declare class MessageFactory {
    private readonly streamId;
    private readonly identity;
    private defaultPartition;
    private readonly defaultMessageChainIds;
    private readonly prevMsgRefs;
    private readonly streamRegistry;
    private readonly groupKeyQueue;
    private readonly signatureValidator;
    private readonly messageSigner;
    private readonly config;
    private firstMessage;
    constructor(opts: MessageFactoryOptions);
    createMessage(content: unknown, metadata: PublishMetadata & {
        timestamp: number;
    }, explicitPartition?: number): Promise<StreamMessage>;
    private getPublisherId;
    private getDefaultPartition;
}
