12 releases (6 breaking)
0.8.1 | Feb 24, 2025 |
---|---|
0.7.0 | Dec 3, 2024 |
0.6.0 | Oct 29, 2024 |
0.1.1 | Apr 19, 2024 |
0.1.0 | Jan 17, 2024 |
#4 in #celestia
164 downloads per month
345KB
7K
SLoC
Lumina node wasm
A compatibility layer for the Lumina
node to
work within a browser environment and be operable with javascript.
Changelog
You can find about the latest changes here.
Example
Starting lumina inside a dedicated worker
import { spawnNode, Network, NodeConfig } from "lumina-node";
const node = await spawnNode();
const mainnetConfig = NodeConfig.default(Network.Mainnet);
await node.start(mainnetConfig);
await node.waitConnected();
await node.requestHeadHeader();
Manual setup
spawnNode
sets up a DedicatedWorker
instance and runs NodeWorker
there. If you want to set things up manually
you need to connect client and worker using objects that have MessagePort
interface.
import { Network, NodeClient, NodeConfig, NodeWorker } from "lumina-node";
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();
Rust API
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
.
Dependencies
~0–39MB
~620K SLoC