@midnight-ntwrk/midnight-js-indexer-public-data-provider
v4.0.4
Published
Implementation of public data provider based on the Midnight Pub-sub indexer
Readme
Indexer Public Data Provider
Public data provider implementation based on the Midnight Pub-sub Indexer. Provides blockchain data queries and real-time subscriptions via GraphQL.
Installation
yarn add @midnight-ntwrk/midnight-js-indexer-public-data-providerQuick Start
import { indexerPublicDataProvider } from '@midnight-ntwrk/midnight-js-indexer-public-data-provider';
const provider = indexerPublicDataProvider(
'https://indexer.example.com/graphql', // Query URL (HTTP/HTTPS)
'wss://indexer.example.com/graphql' // Subscription URL (WS/WSS)
);
// Query contract state
const state = await provider.queryContractState(contractAddress);
// Watch for transaction data
const txData = await provider.watchForTxData(transactionId);
// Subscribe to contract state changes
provider.contractStateObservable(contractAddress).subscribe(state => {
console.log('New state:', state);
});Configuration
| Parameter | Required | Description |
| ------------------ | -------- | ------------------------------------- |
| queryURL | ✓ | GraphQL query endpoint (http/https) |
| subscriptionURL | ✓ | GraphQL subscription endpoint (ws/wss)|
| webSocketImpl | | Custom WebSocket implementation |
API
Query Methods
// Query current contract state
queryContractState(
contractAddress: ContractAddress,
config?: BlockHeightConfig | BlockHashConfig
): Promise<ContractState | null>
// Query contract state at deployment
queryDeployContractState(
contractAddress: ContractAddress
): Promise<ContractState | null>
// Query contract and ZSwap state together (returns LedgerParameters as third element)
queryZSwapAndContractState(
contractAddress: ContractAddress,
config?: BlockHeightConfig | BlockHashConfig
): Promise<[ZswapChainState, ContractState, LedgerParameters] | null>
// Query unshielded token balances
queryUnshieldedBalances(
contractAddress: ContractAddress,
config?: BlockHeightConfig | BlockHashConfig
): Promise<UnshieldedBalances | null>Watch Methods
Wait for data to appear on-chain (polling with automatic retry):
// Wait for contract to be deployed
watchForContractState(
contractAddress: ContractAddress
): Promise<ContractState>
// Wait for unshielded balances
watchForUnshieldedBalances(
contractAddress: ContractAddress
): Promise<UnshieldedBalances>
// Wait for deploy transaction data
watchForDeployTxData(
contractAddress: ContractAddress
): Promise<FinalizedTxData>
// Wait for any transaction data
watchForTxData(
txId: TransactionId
): Promise<FinalizedTxData>Observable Methods
Real-time subscriptions via RxJS:
// Subscribe to contract state changes
contractStateObservable(
contractAddress: ContractAddress,
config?: ContractStateObservableConfig
): Observable<ContractState>
// Subscribe to unshielded balance changes
unshieldedBalancesObservable(
contractAddress: ContractAddress,
config?: ContractStateObservableConfig
): Observable<UnshieldedBalances>Observable Configuration
type ContractStateObservableConfig =
| { type: 'latest' } // From latest state
| { type: 'all' } // From contract deployment
| { type: 'txId'; txId: TransactionId; inclusive?: boolean } // From specific transaction
| { type: 'blockHeight'; blockHeight: number; inclusive?: boolean }
| { type: 'blockHash'; blockHash: string; inclusive?: boolean }Transaction Data
The FinalizedTxData type returned by watch methods includes:
type FinalizedTxData = {
tx: Transaction; // Deserialized ledger transaction
txId: TransactionId; // Transaction identifier
txHash: string; // Transaction hash
status: TxStatus; // SucceedEntirely | FailFallible | FailEntirely
identifiers: readonly TransactionId[]; // All transaction identifiers
blockHeight: number; // Block height
blockHash: string; // Block hash
blockTimestamp: number; // Block timestamp (Unix)
blockAuthor: string | null; // Block author
segmentStatusMap?: Map<number, SegmentStatus>; // Per-segment status for partial success
unshielded: UnshieldedUtxos; // Created and spent UTXOs
indexerId: number; // Indexer internal ID
protocolVersion: number; // Protocol version
fees: { estimatedFees: string; paidFees: string };
}Exports
import {
indexerPublicDataProvider,
IndexerFormattedError,
toUnshieldedUtxos,
toUnshieldedBalances,
type IndexerUtxo
} from '@midnight-ntwrk/midnight-js-indexer-public-data-provider';Resources
Terms & License
By using this package, you agree to Midnight's Terms and Conditions and Privacy Policy.
Licensed under Apache License 2.0.
