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
| Parameter | Type | Description |
|---|---|---|
options.url | string | The Ponder SQL endpoint URL |
Returns
A Client instance with:
- Domain namespaces for type-safe queries
db- Drizzle query builder for custom querieslive- SSE subscription methodgetStatus- Indexer status queryschema- 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
| Parameter | Type | Description |
|---|---|---|
queryFn | (db: DB) => Query | Function that builds the query |
onResult | (result: T[]) => void | Callback for query results |
onError | (error: Error) => void | Callback 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.onchainVoidDomain Namespaces
The client provides domain-specific namespaces for common queries:
| Namespace | Description | Documentation |
|---|---|---|
eventContract | Deployed Gatekeeper1155 contracts | EventContract |
sale | Sale configurations | Sale |
token | ERC1155 token data | Token |
tier | Ticket tier configurations | Tier |
balance | Token holder balances | Balance |
transfer | Transfer history | Transfer |
permission | Role grants and permissions | Permission |
stub | Check-in events | Stub |
void | Voiding events | Void |
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
// ... etcThis is useful for type definitions and building queries before client initialization.