import { BuildTxOptions } from '../tx/builder/index.js';
import { Tag } from '../tx/builder/constants.js';
import { Encoded } from '../utils/encoder.js';
import { _getPollInterval } from '../chain.js';
import { sendTransaction, SendTransactionOptions } from '../send-transaction.js';
import Node from '../Node.js';
import AccountBase from '../account/Base.js';
import OracleBase, { OracleQuery } from './OracleBase.js';
/**
 * @category oracle
 */
interface OracleRegisterOptions extends BuildTxOptions<Tag.OracleRegisterTx, 'accountId' | 'queryFormat' | 'responseFormat'>, Omit<SendTransactionOptions, 'onNode' | 'onAccount'> {
}
/**
 * @category oracle
 */
interface OracleExtendTtlOptions extends BuildTxOptions<Tag.OracleExtendTx, 'callerId' | 'oracleId'>, Omit<SendTransactionOptions, 'onNode' | 'onAccount'> {
}
/**
 * @category oracle
 */
interface OracleRespondToQueryOptions extends BuildTxOptions<Tag.OracleRespondTx, 'callerId' | 'oracleId' | 'queryId' | 'response'>, Omit<SendTransactionOptions, 'onNode' | 'onAccount'> {
}
/**
 * @category oracle
 */
export default class Oracle extends OracleBase {
    #private;
    readonly account: AccountBase;
    options: OracleRegisterOptions & OracleExtendTtlOptions & Parameters<Oracle['handleQueries']>[1] & {
        onNode: Node;
    };
    /**
     * @param account - Account to use as oracle
     * @param options - Options object
     */
    constructor(account: AccountBase, options: OracleRegisterOptions & OracleExtendTtlOptions & Parameters<Oracle['handleQueries']>[1] & {
        onNode: Node;
    });
    /**
     * Register oracle
     * @param queryFormat - Format of query
     * @param responseFormat - Format of query response
     * @param options - Options object
     */
    register(queryFormat: string, responseFormat: string, options?: OracleRegisterOptions): ReturnType<typeof sendTransaction>;
    /**
     * Extend oracle ttl
     * @param options - Options object
     */
    extendTtl(options?: OracleExtendTtlOptions): ReturnType<typeof sendTransaction>;
    /**
     * Poll for oracle queries
     * @param onQuery - OnQuery callback
     * @param options - Options object
     * @param options.interval - Poll interval (default: 5000)
     * @returns Callback to stop polling function
     */
    pollQueries(onQuery: (query: OracleQuery) => void, options?: {
        interval?: number;
        includeResponded?: boolean;
    } & Partial<Parameters<typeof _getPollInterval>[1]>): () => void;
    /**
     * Respond to a query
     * @param queryId - Oracle query id
     * @param response - The response to query
     * @param options - Options object
     */
    respondToQuery(queryId: Encoded.OracleQueryId, response: string, options?: OracleRespondToQueryOptions): ReturnType<typeof sendTransaction>;
    /**
     * Respond to queries to oracle based on callback value
     * @param getResponse - Callback to respond on query
     * @param options - Options object
     * @param options.interval - Poll interval (default: 5000)
     * @returns Callback to stop polling function
     */
    handleQueries(getResponse: (q: OracleQuery) => Promise<string> | string, options?: Parameters<Oracle['pollQueries']>[1] & OracleRespondToQueryOptions): () => void;
}
export {};
