import { HexString, StreamID, StreamPartID } from '@streamr/utils';
import { PublishMetadata } from '../src/publish/Publisher';
import { Message } from './Message';
import { StreamMetadata } from './StreamMetadata';
import { PermissionAssignment, PublicPermissionQuery, UserPermissionQuery } from './permission';
/**
 * A convenience API for managing and accessing an individual stream.
 *
 * @category Important
 */
export declare class Stream {
    readonly id: StreamID;
    private readonly client;
    /**
     * See {@link StreamrClient.publish | StreamrClient.publish}.
     *
     * @category Important
     */
    publish(content: unknown, metadata?: PublishMetadata): Promise<Message>;
    /**
     * See {@link StreamrClient.hasPermission | StreamrClient.hasPermission}.
     *
     * @category Important
     */
    hasPermission(query: Omit<UserPermissionQuery, 'streamId'> | Omit<PublicPermissionQuery, 'streamId'>): Promise<boolean>;
    /**
     * See {@link StreamrClient.getPermissions | StreamrClient.getPermissions}.
     *
     * @category Important
     */
    getPermissions(): Promise<PermissionAssignment[]>;
    /**
     * See {@link StreamrClient.grantPermissions | StreamrClient.grantPermissions}.
     *
     * @category Important
     */
    grantPermissions(...assignments: PermissionAssignment[]): Promise<void>;
    /**
     * See {@link StreamrClient.revokePermissions | StreamrClient.revokePermissions}.
     *
     * @category Important
     */
    revokePermissions(...assignments: PermissionAssignment[]): Promise<void>;
    /**
     * See {@link StreamrClient.addStreamToStorageNode | StreamrClient.addStreamToStorageNode}.
     *
     * @category Important
     */
    addToStorageNode(storageNodeAddress: HexString, opts?: {
        wait: boolean;
        timeout?: number;
    }): Promise<void>;
    /**
     * See {@link StreamrClient.removeStreamFromStorageNode | StreamrClient.removeStreamFromStorageNode}.
     */
    removeFromStorageNode(nodeAddress: HexString): Promise<void>;
    /**
     * See {@link StreamrClient.getStorageNodes | StreamrClient.getStorageNodes}.
     */
    getStorageNodes(): Promise<HexString[]>;
    /**
     * Returns the partitions of the stream.
     */
    getStreamParts(): Promise<StreamPartID[]>;
    getPartitionCount(): Promise<number>;
    getDescription(): Promise<string | undefined>;
    setDescription(description: string): Promise<void>;
    /**
     * Gets the value of `storageDays` field
     */
    getStorageDayCount(): Promise<number | undefined>;
    /**
     * Sets the value of `storageDays` field
     */
    setStorageDayCount(count: number): Promise<void>;
    /**
     * Returns the metadata of the stream.
     */
    getMetadata(): Promise<StreamMetadata>;
    /**
     * Updates the metadata of the stream.
     */
    setMetadata(metadata: StreamMetadata): Promise<void>;
}
