import { StreamID } from '@streamr/utils';
import { Identity } from '../identity/Identity';
import { NetworkNodeFacade } from '../NetworkNodeFacade';
import { StreamIDBuilder } from '../StreamIDBuilder';
import { StreamRegistry } from '../contracts/StreamRegistry';
import { GroupKeyManager } from '../encryption/GroupKeyManager';
import { StreamMessage } from '../protocol/StreamMessage';
import { MessageSigner } from '../signature/MessageSigner';
import { SignatureValidator } from '../signature/SignatureValidator';
import { StreamDefinition } from '../types';
import { GroupKeyQueue } from './GroupKeyQueue';
import { StrictStreamrClientConfig } from '../Config';
export interface PublishMetadata {
    timestamp?: string | number | Date;
    partitionKey?: string | number;
    msgChainId?: string;
    /**
     * Publish a message on behalf of a contract implementing the [ERC-1271](https://eips.ethereum.org/EIPS/eip-1271)
     * standard. The streamr client wallet address must be an authorized signer for the contract.
     */
    erc1271Contract?: string;
}
export declare class Publisher {
    private readonly messageFactories;
    private readonly groupKeyQueues;
    private readonly concurrencyLimit;
    private readonly node;
    private readonly streamRegistry;
    private readonly streamIdBuilder;
    private readonly identity;
    private readonly signatureValidator;
    private readonly messageSigner;
    private readonly config;
    constructor(node: NetworkNodeFacade, streamRegistry: StreamRegistry, groupKeyManager: GroupKeyManager, streamIdBuilder: StreamIDBuilder, identity: Identity, signatureValidator: SignatureValidator, messageSigner: MessageSigner, config: StrictStreamrClientConfig);
    publish(streamDefinition: StreamDefinition, content: unknown, metadata?: PublishMetadata): Promise<StreamMessage>;
    getGroupKeyQueue(streamId: StreamID): Promise<GroupKeyQueue>;
    private createMessageFactory;
}
