TypeScript SDK
Install the off-chain HTTP client and EVM payload helpers:
npm install @reactor-network/sdkFirst message
import { ReactorClient, evm } from "@reactor-network/sdk";
const reactor = new ReactorClient({ apiKey: process.env.REACTOR_API_KEY! });
const payload = evm.generateRandomNumbers.encodeRequest({ count: 3 });
const result = await reactor.send({
destinationName: "base",
destinationAddress: "0x1111111111111111111111111111111111111111",
action: "generate_random_numbers",
payload,
});
console.log(result.messageId, result.transactionId, result.status);ReactorClient defaults to https://api.reactor.network, uses native Fetch, and has a 30-second timeout. Provide requestId to send when explicitly retrying the same idempotent request. The client calculates payload_hash from the decoded payload bytes.
EVM helpers
chain_message
const payload = evm.chainMessage.encode({
payload: "0x010203",
parameters: [{ name: "destination", value: "base" }],
});
const decoded = evm.chainMessage.decode(payload);This encodes (bytes,string[],string[]) and returns a ChainMessagePayload on decode.
web_message
const payload = evm.webMessage.encodeRequest({
method: "POST",
url: "https://example.com/v1",
body: JSON.stringify({ ping: "pong" }),
headers: [{ name: "accept", value: "application/json" }],
});
const request = evm.webMessage.decodeRequest(payload);
const response = evm.webMessage.decodeResponse(responsePayload);Headers are encoded in the Reactor parameter envelope with a header. prefix. decodeResponse returns { statusCode: bigint, body, headers } from (uint256,string,string[],string[]).
generate_random_numbers
const payload = evm.generateRandomNumbers.encodeRequest({ count: 3 });
const request = evm.generateRandomNumbers.decodeRequest(payload);
const numbers = evm.generateRandomNumbers.decodeResponse(responsePayload); // bigint[]The count is a positive uint256; the response is uint256[].
Errors and cancellation
Pass { signal } as the second send argument to cancel. API failures throw ReactorApiError with status, code, optional detail, and optional retryAfter. A custom base URL must use HTTPS, except http://localhost for local tests.
See the HTTP API for wire behavior and statuses.