Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

Client

Query indexed blockchain data via Ponder.

import { Client } from '@sceneinfrastructure/sdk'

Functions

create

Creates a configured Gatekeeper client instance.

import { Client } from '@sceneinfrastructure/sdk'
 
const client = Client.create({
  url: 'https://dev.ponder.mesh.ing/sql'
})

Parameters

ParameterTypeDescription
options.urlstringThe Ponder SQL endpoint URL

Returns

A Client instance with:

  • Domain namespaces for type-safe queries
  • db - Drizzle query builder for custom queries
  • live - SSE subscription method
  • getStatus - Indexer status query
  • schema - Ponder schema tables

Client Interface

db

Drizzle query builder for custom SQL queries.

import { Client } from '@sceneinfrastructure/sdk'
import { eq } from '@ponder/client'
 
const client = Client.create({ url: 'https://dev.ponder.mesh.ing/sql' })
 
const results = await client.db
  .select()
  .from(client.schema.onchainSaleConfig)
  .where(eq(client.schema.onchainSaleConfig.contractAddress, '0x1234567890123456789012345678901234567890'))

live

Subscribe to live query updates via Server-Sent Events.

import { Client } from '@sceneinfrastructure/sdk'
 
const client = Client.create({ url: 'https://dev.ponder.mesh.ing/sql' })
 
const { unsubscribe } = client.live(
  // Query function
  (db) => db.select().from(client.schema.onchainOrder),
  // On result callback
  (result) => console.log('Updated:', result),
  // On error callback
  (error) => console.error('Error:', error)
)
 
// Later: clean up subscription
unsubscribe()

Parameters

ParameterTypeDescription
queryFn(db: DB) => QueryFunction that builds the query
onResult(result: T[]) => voidCallback for query results
onError(error: Error) => voidCallback for errors

Returns

type LiveResult = {
  unsubscribe: () => void  // Function to stop the subscription
}

getStatus

Get indexer status for all indexed chains.

import { Client } from '@sceneinfrastructure/sdk'
 
const client = Client.create({ url: 'https://dev.ponder.mesh.ing/sql' })
 
const status = await client.getStatus()
 
console.log('Indexer status:', status)

Returns an array of chain status objects with sync progress information.


schema

Ponder schema tables for building custom queries.

import { Client } from '@sceneinfrastructure/sdk'
 
const client = Client.create({ url: 'https://dev.ponder.mesh.ing/sql' })
 
// Access schema tables
client.schema.onchainEventContract
client.schema.onchainToken
client.schema.onchainTicketTier
client.schema.onchainSaleConfig
client.schema.onchainOrder
client.schema.onchainOrderItem
client.schema.onchainTicketTransfer
client.schema.onchainTicketBalance
client.schema.onchainRoleGrant
client.schema.onchainSwap
client.schema.onchainVoid

Domain Namespaces

The client provides domain-specific namespaces for common queries:

NamespaceDescriptionDocumentation
eventContractDeployed Gatekeeper1155 contractsEventContract
saleSale configurationsSale
tokenERC1155 token dataToken
tierTicket tier configurationsTier
balanceToken holder balancesBalance
transferTransfer historyTransfer
permissionRole grants and permissionsPermission
stubCheck-in eventsStub
voidVoiding eventsVoid

Example Usage

import { Client, ADMIN_ROLE } from '@sceneinfrastructure/sdk'
 
const client = Client.create({ url: 'https://dev.ponder.mesh.ing/sql' })
 
// Get a deployed contract
const contract = await client.eventContract.get({
  contractAddress: '0x1234567890123456789012345678901234567890'
})
 
// List sales for a contract
const sales = await client.sale.listByContract({
  contractAddress: '0x1234567890123456789012345678901234567890'
})
 
// Check a user's balance
const balance = await client.balance.get({
  contractAddress: '0x1234567890123456789012345678901234567890',
  tokenId: 1n,
  address: '0x2345678901234567890123456789012345678901'
})
 
// Check if user has admin role
const isAdmin = await client.permission.hasRole({
  contractAddress: '0x1234567890123456789012345678901234567890',
  user: '0x2345678901234567890123456789012345678901',
  role: ADMIN_ROLE
})

Static Exports

schema

The Ponder schema is also available as a static export:

import { Client } from '@sceneinfrastructure/sdk'
 
// Access schema without creating a client
Client.schema.onchainEventContract
Client.schema.onchainSaleConfig
// ... etc

This is useful for type definitions and building queries before client initialization.