Crates.io | lumina-node-wasm |
lib.rs | lumina-node-wasm |
version | 0.6.0 |
source | src |
created_at | 2024-01-17 14:53:42.37413 |
updated_at | 2024-10-29 17:01:41.003901 |
description | Browser compatibility layer for the Lumina node |
homepage | https://www.eiger.co |
repository | https://github.com/eigerco/lumina |
max_upload_size | |
id | 1103061 |
size | 101,886 |
A compatibility layer for the Lumina
node to
work within a browser environment and be operable with javascript.
Starting lumina inside a dedicated worker
import { spawnNode, NodeConfig, Network } from "lumina-node";
const node = await spawnNode();
const mainnetConfig = NodeConfig.default(Network.Mainnet);
await node.start(mainnetConfig);
await node.waitConnected();
await node.requestHeadHeader();
Note that spawnNode
implicitly calls wasm initialisation code. If you want to set things up manually, make sure to call the default export before using any of the wasm functionality.
import init, { NodeConfig, Network } from "lumina-node";
await init();
const config = NodeConfig.default(Network.Mainnet);
// client and worker accept any object with MessagePort like interface e.g. Worker
const channel = new MessageChannel();
const worker = new NodeWorker(channel.port1);
// note that this runs lumina in the current context (and doesn't create a new web-worker). Promise created with `.run()` never completes.
const worker_promise = worker.run();
// client port can be used locally or transferred like any plain MessagePort
const client = await new NodeClient(channel.port2);
await client.waitConnected();
await client.requestHeadHeader();
For comprehensive and fully typed interface documentation, see lumina-node and celestia-types documentation on docs.rs. You can see there the exact structure of more complex types, such as ExtendedHeader
. JavaScript API's goal is to provide similar interface to Rust when possible, e.g. NodeClient
mirrors Node
.