No description
Find a file
Michael Lynch 97dff6c195 Fix race condition in WebBleConnection
WebBleConnection's constructor calls init(), which is async. Constructors can't be async, so this means that callers who instantiate WebBleConnection can end up with it in an invalid state after construction if init() hasn't completed by the time the caller tries to access class members that depend on init.

I think the cleaner solution is to push the init() call to open(), which is async, so it can just await the results of init(), and the caller can trust that after calling open(), the connection is fully initialized.

This is a second attempt (see 78a0037). The fix here is to defer emitting the connected event a by wrapping it in a setTimeout(..., 0), which prevents open() from firing the event before the client has a chance to set up an event handler for the 'connected' event. This matches the strategy we use in WebSerialConnection.
2026-01-23 06:30:10 -05:00
examples add example to parse advert from meshcore packet url 2025-10-08 22:38:20 +13:00
src Fix race condition in WebBleConnection 2026-01-23 06:30:10 -05:00
.gitignore add node_modules to .gitignore 2025-03-03 09:46:24 +13:00
.npmignore add .idea to .npmignore 2025-02-13 13:32:49 +13:00
index.html fix null check 2025-04-13 13:55:55 +12:00
LICENSE Create LICENSE 2025-02-12 23:09:24 +13:00
package-lock.json 1.10.0 2025-10-14 15:32:44 +13:00
package.json 1.10.0 2025-10-14 15:32:44 +13:00
README.md Update README to link to new meshcore-dev/MeshCore repo 2025-12-09 19:54:39 -08:00

MeshCore.js

A Javascript library for interacting with a MeshCore device running the Companion Radio Firmware.

This library can be used in a Web Browser to connect to MeshCore Companion devices over BLE or USB Serial.

It can also be used in NodeJS to connect to MeshCore Companion devices over TCP/WiFi or USB Serial.

Supported Connection Methods

Install

npm install @liamcottle/meshcore.js

Simple Example

import { TCPConnection, NodeJSSerialConnection } from "@liamcottle/meshcore.js";

// serial connections are supported by "companion_radio_usb" firmware
const connection = new NodeJSSerialConnection("/dev/cu.usbmodem14401");

// tcp connections are supported by "companion_radio_wifi" firmware
// const connection = new TCPConnection("10.1.0.226", 5000);

// wait until connected
connection.on("connected", async () => {

    // we are now connected
    console.log("connected!");

    // log contacts
    const contacts = await connection.getContacts();
    for(const contact of contacts) {
        console.log(`Contact: ${contact.advName}`);
    }

    // disconnect
    connection.close();

});

// connect to meshcore device
await connection.connect();

Examples

There's a few other examples scripts in the examples folder.

License

MIT