import { Payload } from './schemas/payload';
import { Static } from '@fastify/type-provider-typebox';
declare const EventObserverOptionsSchema: import("@sinclair/typebox").TObject<{
    /** Event observer host name (usually '0.0.0.0') */
    hostname: import("@sinclair/typebox").TString;
    /** Event observer port */
    port: import("@sinclair/typebox").TInteger;
    /** Authorization token for all Chainhook payloads */
    auth_token: import("@sinclair/typebox").TString;
    /** Base URL that will be used by Chainhook to send all payloads to this event observer */
    external_base_url: import("@sinclair/typebox").TString;
    /** Wait for the chainhook node to be available before submitting predicates */
    wait_for_chainhook_node: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
    /** Validate the JSON schema of received chainhook payloads and report errors when invalid */
    validate_chainhook_payloads: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
    /** Validate the authorization token sent by the server is correct. */
    validate_token_authorization: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
    /** Size limit for received chainhook payloads (default 40MB) */
    body_limit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
    /** Node type: `chainhook` or `ordhook` */
    node_type: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"chainhook">, import("@sinclair/typebox").TLiteral<"ordhook">]>>;
    /**
     * Directory where registered predicates will be persisted to disk so they can be recalled on
     * restarts.
     */
    predicate_disk_file_path: import("@sinclair/typebox").TString;
    /**
     * How often we should check with the Chainhook server to make sure our predicates are active and
     * up to date. If they become obsolete, we will attempt to re-register them.
     */
    predicate_health_check_interval_ms: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
}>;
/** Chainhook event observer configuration options */
export type EventObserverOptions = Static<typeof EventObserverOptionsSchema>;
declare const ChainhookNodeOptionsSchema: import("@sinclair/typebox").TObject<{
    /** Base URL where the Chainhook node is located */
    base_url: import("@sinclair/typebox").TString;
}>;
/** Chainhook node connection options */
export type ChainhookNodeOptions = Static<typeof ChainhookNodeOptionsSchema>;
/**
 * Callback that will receive every single payload sent by Chainhook as a result of any predicates
 * that have been registered.
 */
export type OnPredicatePayloadCallback = (payload: Payload) => Promise<void>;
export declare const EventObserverPredicateSchema: import("@sinclair/typebox").TObject<{
    name: import("@sinclair/typebox").TString;
    version: import("@sinclair/typebox").TInteger;
    chain: import("@sinclair/typebox").TString;
    networks: import("@sinclair/typebox").TObject<{
        mainnet: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
            start_block: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
            end_block: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
            expire_after_occurrence: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
            include_proof: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
            include_inputs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
            include_outputs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
            include_witness: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
            if_this: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"txid">;
                equals: import("@sinclair/typebox").TString;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"outputs">;
                op_return: import("@sinclair/typebox").TObject<{
                    starts_with: import("@sinclair/typebox").TString;
                }>;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"outputs">;
                op_return: import("@sinclair/typebox").TObject<{
                    equals: import("@sinclair/typebox").TString;
                }>;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"outputs">;
                op_return: import("@sinclair/typebox").TObject<{
                    ends_with: import("@sinclair/typebox").TString;
                }>;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"outputs">;
                p2pkh: import("@sinclair/typebox").TObject<{
                    equals: import("@sinclair/typebox").TString;
                }>;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"outputs">;
                p2sh: import("@sinclair/typebox").TObject<{
                    equals: import("@sinclair/typebox").TString;
                }>;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"outputs">;
                p2wpkh: import("@sinclair/typebox").TObject<{
                    equals: import("@sinclair/typebox").TString;
                }>;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"outputs">;
                p2wsh: import("@sinclair/typebox").TObject<{
                    equals: import("@sinclair/typebox").TString;
                }>;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"stacks_protocol">;
                operation: import("@sinclair/typebox").TLiteral<"block_committed">;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"stacks_protocol">;
                operation: import("@sinclair/typebox").TLiteral<"leader_registered">;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"stacks_protocol">;
                operation: import("@sinclair/typebox").TLiteral<"stx_transfered">;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"stacks_protocol">;
                operation: import("@sinclair/typebox").TLiteral<"stx_locked">;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"ordinals_protocol">;
                operation: import("@sinclair/typebox").TLiteral<"inscription_feed">;
                meta_protocols: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"all">, import("@sinclair/typebox").TLiteral<"brc-20">]>>>;
            }>]>;
        }>, import("@sinclair/typebox").TObject<{
            start_block: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
            end_block: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
            expire_after_occurrence: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
            if_this: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"txid">;
                equals: import("@sinclair/typebox").TString;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"block_height">;
                higher_than: import("@sinclair/typebox").TInteger;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"ft_event">;
                asset_identifier: import("@sinclair/typebox").TString;
                actions: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"mint">, import("@sinclair/typebox").TLiteral<"transfer">, import("@sinclair/typebox").TLiteral<"burn">]>>;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"nft_event">;
                asset_identifier: import("@sinclair/typebox").TString;
                actions: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"mint">, import("@sinclair/typebox").TLiteral<"transfer">, import("@sinclair/typebox").TLiteral<"burn">]>>;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"stx_event">;
                actions: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"mint">, import("@sinclair/typebox").TLiteral<"transfer">, import("@sinclair/typebox").TLiteral<"burn">, import("@sinclair/typebox").TLiteral<"lock">]>>;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"print_event">;
                contract_identifier: import("@sinclair/typebox").TString;
                contains: import("@sinclair/typebox").TString;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"contract_call">;
                contract_identifier: import("@sinclair/typebox").TString;
                method: import("@sinclair/typebox").TString;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"contract_deployment">;
                deployer: import("@sinclair/typebox").TString;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"contract_deployment">; /** Chainhook node connection options */
                implement_trait: import("@sinclair/typebox").TString;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"signer_message">;
                after_timestamp: import("@sinclair/typebox").TInteger;
            }>]>;
            decode_clarity_values: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
            include_contract_abi: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
        }>]>>;
        testnet: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
            start_block: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
            end_block: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
            expire_after_occurrence: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
            include_proof: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
            include_inputs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
            include_outputs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
            include_witness: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
            if_this: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"txid">;
                equals: import("@sinclair/typebox").TString;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"outputs">;
                op_return: import("@sinclair/typebox").TObject<{
                    starts_with: import("@sinclair/typebox").TString;
                }>;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"outputs">;
                op_return: import("@sinclair/typebox").TObject<{
                    equals: import("@sinclair/typebox").TString;
                }>;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"outputs">;
                op_return: import("@sinclair/typebox").TObject<{
                    ends_with: import("@sinclair/typebox").TString;
                }>;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"outputs">;
                p2pkh: import("@sinclair/typebox").TObject<{
                    equals: import("@sinclair/typebox").TString;
                }>;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"outputs">;
                p2sh: import("@sinclair/typebox").TObject<{
                    equals: import("@sinclair/typebox").TString;
                }>;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"outputs">;
                p2wpkh: import("@sinclair/typebox").TObject<{
                    equals: import("@sinclair/typebox").TString;
                }>;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"outputs">;
                p2wsh: import("@sinclair/typebox").TObject<{
                    equals: import("@sinclair/typebox").TString;
                }>;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"stacks_protocol">;
                operation: import("@sinclair/typebox").TLiteral<"block_committed">;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"stacks_protocol">;
                operation: import("@sinclair/typebox").TLiteral<"leader_registered">;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"stacks_protocol">;
                operation: import("@sinclair/typebox").TLiteral<"stx_transfered">;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"stacks_protocol">;
                operation: import("@sinclair/typebox").TLiteral<"stx_locked">;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"ordinals_protocol">;
                operation: import("@sinclair/typebox").TLiteral<"inscription_feed">;
                meta_protocols: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"all">, import("@sinclair/typebox").TLiteral<"brc-20">]>>>;
            }>]>;
        }>, import("@sinclair/typebox").TObject<{
            start_block: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
            end_block: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
            expire_after_occurrence: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
            if_this: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"txid">;
                equals: import("@sinclair/typebox").TString;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"block_height">;
                higher_than: import("@sinclair/typebox").TInteger;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"ft_event">;
                asset_identifier: import("@sinclair/typebox").TString;
                actions: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"mint">, import("@sinclair/typebox").TLiteral<"transfer">, import("@sinclair/typebox").TLiteral<"burn">]>>;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"nft_event">;
                asset_identifier: import("@sinclair/typebox").TString;
                actions: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"mint">, import("@sinclair/typebox").TLiteral<"transfer">, import("@sinclair/typebox").TLiteral<"burn">]>>;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"stx_event">;
                actions: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"mint">, import("@sinclair/typebox").TLiteral<"transfer">, import("@sinclair/typebox").TLiteral<"burn">, import("@sinclair/typebox").TLiteral<"lock">]>>;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"print_event">;
                contract_identifier: import("@sinclair/typebox").TString;
                contains: import("@sinclair/typebox").TString;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"contract_call">;
                contract_identifier: import("@sinclair/typebox").TString;
                method: import("@sinclair/typebox").TString;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"contract_deployment">;
                deployer: import("@sinclair/typebox").TString;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"contract_deployment">; /** Chainhook node connection options */
                implement_trait: import("@sinclair/typebox").TString;
            }>, import("@sinclair/typebox").TObject<{
                scope: import("@sinclair/typebox").TLiteral<"signer_message">;
                after_timestamp: import("@sinclair/typebox").TInteger;
            }>]>;
            decode_clarity_values: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
            include_contract_abi: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
        }>]>>;
    }>;
}>;
/**
 * Partial predicate definition that allows users to build the core parts of a predicate and let the
 * event observer fill in the rest.
 */
export type EventObserverPredicate = Static<typeof EventObserverPredicateSchema>;
/**
 * Local web server that registers predicates and receives events from a Chainhook node. It handles
 * retry logic and node availability transparently and provides a callback for individual event
 * processing.
 *
 * Predicates registered here do not accept a `then_that` entry as this will be configured
 * automatically to redirect events to this server.
 *
 * Events relayed by this component will include the original predicate's UUID so actions can be
 * taken for each relevant predicate.
 */
export declare class ChainhookEventObserver {
    private fastify?;
    private observer;
    private chainhook;
    private healthCheckTimer?;
    constructor(observer: EventObserverOptions, chainhook: ChainhookNodeOptions);
    /**
     * Starts the Chainhook event observer.
     * @param predicates - Predicates to register. If `predicates_disk_file_path` is enabled in the
     * observer, predicates stored on disk will take precedent over those specified here.
     * @param callback - Function to handle every Chainhook event payload sent by the node
     */
    start(predicates: EventObserverPredicate[], callback: OnPredicatePayloadCallback): Promise<void>;
    /**
     * Stop the Chainhook event server gracefully.
     */
    close(): Promise<void>;
}
export * from './schemas/bitcoin/if_this';
export * from './schemas/bitcoin/payload';
export * from './schemas/common';
export * from './schemas/payload';
export * from './schemas/predicate';
export * from './schemas/stacks/if_this';
export * from './schemas/stacks/payload';
export * from './schemas/stacks/signers';
export * from './schemas/stacks/tx_events';
export * from './schemas/stacks/tx_kind';
export * from './server';
