UNPKG

@hirosystems/chainhook-client

Version:
308 lines (307 loc) 20.8 kB
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';