import { Logger } from '../utils/logger';
import { HederaMirrorNode } from '../services/mirror-node';
import { HCS2ClientConfig, HCS2Message, HCS2RegisterMessage, HCS2UpdateMessage, HCS2DeleteMessage, HCS2MigrateMessage, HCS2RegistryType, TopicRegistrationResponse, RegistryOperationResponse, TopicRegistry, CreateRegistryOptions, RegisterEntryOptions, UpdateEntryOptions, DeleteEntryOptions, MigrateTopicOptions, QueryRegistryOptions } from './types';
import { TransactionReceipt } from '@hashgraph/sdk';
import { NetworkType } from '../utils/types';
/**
 * Base client for HCS-2 operations
 * This abstract class provides shared functionality for both SDK and browser implementations
 */
export declare abstract class HCS2BaseClient {
    protected logger: Logger;
    protected mirrorNode: HederaMirrorNode;
    protected network: NetworkType;
    /**
     * Create a new HCS-2 base client
     * @param config Client configuration
     */
    constructor(config: HCS2ClientConfig);
    /**
     * Create a new registry topic
     * @param options Registry creation options
     * @returns Promise resolving to the transaction result
     */
    abstract createRegistry(options: CreateRegistryOptions): Promise<TopicRegistrationResponse>;
    /**
     * Register a new entry in the registry
     * @param registryTopicId The topic ID of the registry
     * @param options Registration options
     * @returns Promise resolving to the operation result
     */
    abstract registerEntry(registryTopicId: string, options: RegisterEntryOptions): Promise<RegistryOperationResponse>;
    /**
     * Update an existing entry in the registry (indexed registries only)
     * @param registryTopicId The topic ID of the registry
     * @param options Update options
     * @returns Promise resolving to the operation result
     */
    abstract updateEntry(registryTopicId: string, options: UpdateEntryOptions): Promise<RegistryOperationResponse>;
    /**
     * Delete an entry from the registry (indexed registries only)
     * @param registryTopicId The topic ID of the registry
     * @param options Delete options
     * @returns Promise resolving to the operation result
     */
    abstract deleteEntry(registryTopicId: string, options: DeleteEntryOptions): Promise<RegistryOperationResponse>;
    /**
     * Migrate a registry to a new topic
     * @param registryTopicId The topic ID of the registry
     * @param options Migration options
     * @returns Promise resolving to the operation result
     */
    abstract migrateRegistry(registryTopicId: string, options: MigrateTopicOptions): Promise<RegistryOperationResponse>;
    /**
     * Get all entries from a registry
     * @param topicId The topic ID of the registry
     * @param options Query options
     * @returns Promise resolving to the registry information
     */
    abstract getRegistry(topicId: string, options?: QueryRegistryOptions): Promise<TopicRegistry>;
    /**
     * Submit a message to a topic
     * @param topicId The topic ID to submit to
     * @param payload The message payload
     * @returns Promise resolving to the transaction receipt
     */
    abstract submitMessage(topicId: string, payload: HCS2Message): Promise<TransactionReceipt>;
    /**
     * Determine the registry type from a topic memo
     * @param memo The topic memo
     * @returns The registry type or undefined if not found
     */
    protected parseRegistryTypeFromMemo(memo: string): {
        registryType: HCS2RegistryType;
        ttl: number;
    } | undefined;
    /**
     * Generate a memo string for a registry topic
     * @param registryType The registry type
     * @param ttl The time-to-live in seconds
     * @returns The memo string
     */
    protected generateRegistryMemo(registryType: HCS2RegistryType, ttl: number): string;
    /**
     * Validate a HCS-2 message
     * @param message The message to validate
     * @returns Validation result
     */
    protected validateMessage(message: any): {
        valid: boolean;
        errors: string[];
    };
    /**
     * Create a register message
     * @param targetTopicId The target topic ID
     * @param metadata Optional metadata URI
     * @param memo Optional memo
     * @returns The register message
     */
    protected createRegisterMessage(targetTopicId: string, metadata?: string, memo?: string): HCS2RegisterMessage;
    /**
     * Create an update message
     * @param targetTopicId The target topic ID
     * @param uid The unique ID to update
     * @param metadata Optional metadata URI
     * @param memo Optional memo
     * @returns The update message
     */
    protected createUpdateMessage(targetTopicId: string, uid: string, metadata?: string, memo?: string): HCS2UpdateMessage;
    /**
     * Create a delete message
     * @param uid The unique ID to delete
     * @param memo Optional memo
     * @returns The delete message
     */
    protected createDeleteMessage(uid: string, memo?: string): HCS2DeleteMessage;
    /**
     * Create a migrate message
     * @param targetTopicId The target topic ID to migrate to
     * @param metadata Optional metadata URI
     * @param memo Optional memo
     * @returns The migrate message
     */
    protected createMigrateMessage(targetTopicId: string, metadata?: string, memo?: string): HCS2MigrateMessage;
    /**
     * Parse registry entries from topic messages
     * @param topicId The topic ID
     * @param messages The messages to parse
     * @param registryType The registry type
     * @param ttl The time-to-live in seconds
     * @returns The parsed registry
     */
    protected parseRegistryEntries(topicId: string, messages: any[], registryType: HCS2RegistryType, ttl: number): TopicRegistry;
}
//# sourceMappingURL=base-client.d.ts.map