Transports
Transports are responsible for delivering JSON-RPC requests and responses between the dApp and the wallet extension.
Core interface
Section titled “Core interface”import type { RequestPayload, ResponsePayload } from "@sigilry/dapp/messages";
export interface RpcTransport { submit(payload: RequestPayload): Promise<ResponsePayload>;}WindowTransport
Section titled “WindowTransport”WindowTransport uses window.postMessage for cross-context communication.
import { createCantonClient, WindowTransport } from "@sigilry/dapp";
async function getStatus() { const transport = new WindowTransport(window, { timeout: 30000, targetOrigin: "*", });
const client = createCantonClient(transport); return await client.status();}
getStatus().then(console.log);Options
Section titled “Options”timeout: request timeout in milliseconds (default30000).targetOrigin:postMessagetarget origin (default*).
Custom transports
Section titled “Custom transports”You can implement RpcTransport for other environments (HTTP, WebSocket, iframe bridges):
import type { RequestPayload, ResponsePayload } from "@sigilry/dapp/messages";import type { RpcTransport } from "@sigilry/dapp/transport";
export class HttpTransport implements RpcTransport { constructor(private readonly baseUrl: string) {}
async submit(payload: RequestPayload): Promise<ResponsePayload> { const response = await fetch(`${this.baseUrl}/rpc`, { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify(payload), });
if (!response.ok) { throw new Error(`HTTP ${response.status}`); }
return (await response.json()) as ResponsePayload; }}