UNPKG

@arkiv-network/sdk

Version:

TypeScript client library for Arkiv's blockchains interactions

114 lines (106 loc) • 3.23 kB
import type { Hex } from "viem" /** * An attribute as the node renders it: the name, the type **tag** (not the wire typeId), and the * value in the JSON encoding that type prescribes — a JSON number for `i32`, a `0x` QUANTITY for * `u64` and `u256`, a decimal string for `dec`, `0x` DATA for the byte-shaped types (`bytes` * included), and a string for `str`. * * The encoding follows the *declared type*, never the magnitude, so a decoder dispatches on `type` * and never has to guess from the shape of the value. */ export type RpcAttribute = { name: string type: string value: unknown } /** * An entry of the `attributeSchema` projection — a name, its type, and whether the node indexes * it, with no value. */ export type RpcAttributeSchemaEntry = { name: string type: string indexed?: boolean } /** * The `creationFlags` projection. */ export type RpcCreationFlags = { readonly?: boolean permissionlessExtension?: boolean raw: number } /** * An entity as `arkiv_query` returns it. Every field is present only if it was selected, so all of * them are optional here — {@link RpcSelect} is what decides which arrive. */ export type RpcEntity = { key?: Hex owner?: Hex creator?: Hex createdAt?: Hex updatedAt?: Hex expiresAt?: Hex creationFlags?: RpcCreationFlags | number attributeSchema?: RpcAttributeSchemaEntry[] attributes?: RpcAttribute[] } /** * The `select` projection: flat, per-field booleans. Everything except `key` defaults to **off**, * so a query asks for exactly what it needs and nothing more. * * `attributes` is the one field with a third form: `true` for every attribute, or a map of names * for a subset. */ export type RpcSelect = { key?: boolean owner?: boolean creator?: boolean createdAt?: boolean updatedAt?: boolean expiresAt?: boolean creationFlags?: boolean attributeSchema?: boolean attributes?: boolean | Record<string, boolean> /** * Not a field of each entity but of the page: the number of entities the query matches at the * block, regardless of `limit` and `offset`, returned as the response's `count`. */ count?: boolean } /** The second parameter of `arkiv_query` — what to return, and where in the results to start. */ export type RpcQueryOptions = { /** What to return. Defaults to `{ key: true }`. */ select?: RpcSelect /** Page size, as a hex quantity. Node maximum is 100. */ limit?: Hex /** How many matches to skip before the page, as a hex quantity. Defaults to none. */ offset?: Hex } export type ArkivRpcSchema = [ { Method: "arkiv_query" Parameters?: [query: string, queryOptions?: RpcQueryOptions] ReturnType: { data: RpcEntity[] blockNumber: Hex /** How many entities the query matches, as a hex quantity. Present only when selected. */ count?: Hex } }, { Method: "arkiv_getEntity" Parameters: [entityKey: Hex] /** Every field except `attributeSchema`, or `null` if no live entity has the key. */ ReturnType: RpcEntity | null }, { Method: "arkiv_getBlockTiming" Parameters?: [] ReturnType: { current_block: bigint current_block_time: number duration: number } }, ]