viem-portal
v0.6.0
Published
Typed portal messaging layer with Viem transport integration
Maintainers
Readme
viem-portal
Typed messaging layer with Viem transport integration.
Installation
bun add viem-portalQuick Start
Define Schema
import type { MergeSchemas } from 'viem-portal'
import type { EthRpcSchema } from 'viem-portal/provider'
type MySchema = {
greet: { params: [name: string]; result: string }
}
type FullSchema = MergeSchemas<EthRpcSchema, MySchema>Create Host
import { createHost } from 'viem-portal'
import { createMockRpcHandler } from 'viem-portal/provider'
const host = createHost<FullSchema>(transport, {
handlers: {
...createMockRpcHandler({
eth_chainId: '0x1',
eth_blockNumber: '0x10f2c5a',
}),
greet: ([name]) => `Hello, ${name}!`,
},
})Create Client
import { createClient } from 'viem-portal'
const client = createClient<FullSchema>(transport)
const greeting = await client.request('greet', 'World')
// ^? stringViem Integration
import { createPublicClient } from 'viem'
import { mainnet } from 'viem/chains'
import { portalTransport } from 'viem-portal/provider'
const viemClient = createPublicClient({
chain: mainnet,
transport: portalTransport(client),
})
const chainId = await viemClient.getChainId()API
Core (viem-portal)
createClient<Schema>(transport, options?)- Create portal clientcreateHost<Schema>(transport, options)- Create portal hostcreateLoopbackTransports()- Create connected transport pair for testing
Provider (viem-portal/provider)
portalTransport(client)- Create Viem-compatible transportcreateRpcHandler({ rpcUrl })- Spreadable RPC handler for productioncreateMockRpcHandler(responses)- Spreadable mock handler for testing
License
MIT
