8 releases (4 breaking)

new 0.6.0 Oct 29, 2024
0.5.2 Oct 21, 2024
0.3.0 Sep 24, 2024
0.2.0 Aug 21, 2024
0.1.0 Jan 17, 2024

#846 in Magic Beans

Download history 5/week @ 2024-07-29 141/week @ 2024-08-19 28/week @ 2024-09-16 180/week @ 2024-09-23 163/week @ 2024-09-30 171/week @ 2024-10-07 45/week @ 2024-10-14 152/week @ 2024-10-21

550 downloads per month

Apache-2.0

285KB
6K SLoC

Lumina node wasm

A compatibility layer for the Lumina node to work within a browser environment and be operable with javascript.

Example

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();

Manual setup

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();

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
~625K SLoC