@somnia-chain/reactivity
v0.1.4
Published
Typescript SDK to build event-driven applications on the Somnia blockchain
Maintainers
Readme
🚀 Somnia Reactivity TypeScript SDK
The Somnia Reactivity TypeScript SDK enables applications within the Javascript and Typescript ecosystem (full stack) to immediately utilize reactivity tooling offered by Somnia chain with minimal boiler-plate code.
🔒 Key abtractions
The SDK uses viem to abstract away RPC calls, wallets, transaction creation and starting subscriptions.
- For read-only access, provide just a public client—the SDK handles contract setup for Somnia testnet or mainnet.
- For transactions, add any wallet client: private key-based, remote signer, ERC-4337 AA, etc.
🚀 Getting Started
📦 SDK Installation
Example with npm:
npm i @somnia-chain/reactivityHowever, feel free to use alternatives like pnpm
pnpm add @somnia-chain/reactivity🔌 Plugging into the SDK
You'll need viem installed for the public and or wallet client. Install it with npm i viem.
import { createPublicClient, createWalletClient, http, defineChain } from 'viem'
import { SDK } from '@somnia-chain/reactivity'
// Example: Public client (required for reading data)
const chain = defineChain() // see viem docs for defining a chain
const publicClient = createPublicClient({
chain,
transport: http(),
})
// Optional: Wallet client for writes
const walletClient = createWalletClient({
account,
chain,
transport: http(),
})
const sdk = new SDK({
public: publicClient,
wallet: walletClient, // Omit if not executing transactions on-chain
})📡 Activating Websocket Reactivity Subscriptions
Use WebSocket subscriptions for real-time updates to contract event and state updates atomically. Define params and subscribe — the SDK handles the rest via WebSockets.
import { SDK, SubscriptionInitParams, SubscriptionCallback } from '@somnia-chain/reactivity'
// Example params
const initParams: SubscriptionInitParams = {
ethCalls: [], // State to read when events are emitted
context: 'data', // Optional, e.g., 'topic0', 'data', 'address'
onData: (data: SubscriptionCallback) => console.log('Received:', data),
onlyPushChanges: true, // Optional, push only if data changes
}
const subscription = await sdk.subscribe(initParams)
// Later, unsubscribe when done
await subscription.unsubscribe()