feat(supply-depot): add MeshCore Web with self-signed HTTPS#1004
Open
chriscrosstalk wants to merge 1 commit into
Open
feat(supply-depot): add MeshCore Web with self-signed HTTPS#1004chriscrosstalk wants to merge 1 commit into
chriscrosstalk wants to merge 1 commit into
Conversation
Adds the MeshCore web client to the Supply Depot catalog (host port 8500), alongside the existing Meshtastic apps. Uses aXistem's prebuilt image of Liam Cottle's MeshCore client (MeshCore is a sibling LoRa mesh project to Meshtastic). The image is stock nginx serving a static Flutter build over HTTP, but the client reaches radios via Web Bluetooth / Web Serial, which browsers only allow from a secure (HTTPS) context. So we serve it over HTTPS: a new preinstall hook generates a self-signed cert + a small SSL nginx config into storage/meshcore-web, both bind-mounted into the container (the config over the image's default.conf), publishing 443. Same one-time browser-warning approach as Vaultwarden, whose openssl cert generation is refactored into a shared _ensureSelfSignedCert helper. Also adds a NOMAD-specific docs section + Manage>Docs anchor, and registers the IconAntenna icon. Meshtastic Web left unchanged. Validated on NOMAD3 (v1.33.0-rc.1): the image + SSL config + self-signed cert serves the MeshCore Flutter app over HTTPS 200 with working SPA fallback. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Adds MeshCore Web to the Supply Depot catalog (host port 8500), alongside the existing Meshtastic apps. MeshCore is a sibling LoRa mesh project to Meshtastic; this is its browser-based client (aXistem's prebuilt image of Liam Cottle's MeshCore client).
Why HTTPS
The image is stock nginx serving a static Flutter build over HTTP, but the MeshCore client reaches radios via Web Bluetooth / Web Serial, which browsers only permit from a secure (HTTPS) context. Over plain HTTP the app loads but cannot connect to a device.
NOMAD therefore serves it over HTTPS: a new preinstall hook generates a self-signed cert + a small SSL nginx config into
storage/meshcore-web, both bind-mounted into the container (the config over the image'sdefault.conf), publishing 443. This is the same one-time-browser-warning approach already used for Vaultwarden, whose openssl cert generation is refactored into a shared_ensureSelfSignedCerthelper.Changes
MESHCORE_WEBservice name +MESHCORE_WEB_STORAGE_PATH_runPreinstallActions__MeshCoreWeb()(cert + SSL config); shared_ensureSelfSignedCerthelper (Vaultwarden refactored onto it)Manage > DocsanchorIconAntennaiconKNOWN_NEEDS_SETUP(it serves on 443 only with the mounted TLS config)Meshtastic Web is unchanged.
Testing
Verified end-to-end on a NOMAD running v1.33.0-rc.1: installed through the real Supply Depot flow. The preinstall generated the cert + config, the container came up with the correct binds and
443 -> 8500, andhttps://<nomad>:8500returns HTTP 200 serving the MeshCore client with working SPA fallback.nginx -tis clean.Note
The three pre-existing
tscerrors inapp/jobs/*_job.ts(RedisEXtyping) are already present ondevand are not introduced by this PR.🤖 Generated with Claude Code