From 7c0ba14a001a0048b4e940b5f8954438118f3467 Mon Sep 17 00:00:00 2001 From: ssmithx Date: Wed, 9 Sep 2026 07:49:30 +0000 Subject: [PATCH] feat(neode-ui): launch cuprate tiles on the Cuprate UI companion MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit cuprate publishes only raw JSON RPC (18090 restricted, 18183 p2p), so launches must land on the companion on :18091, never on the running node's runtimeUrl — same root-path special-case bitcoin uses, with the dev vite proxy for /app/cuprate-ui/. Alias cuprate -> cuprate-ui so the port-auth lookup finds the gated launch port on HTTPS nodes; pin the companion icon to the cuprate mark. --- neode-ui/src/views/appSession/appSessionConfig.ts | 12 ++++++++++++ .../views/appSession/generatedAppSessionConfig.ts | 2 ++ neode-ui/src/views/discover/curatedApps.ts | 2 ++ neode-ui/vite.config.ts | 5 +++++ 4 files changed, 21 insertions(+) diff --git a/neode-ui/src/views/appSession/appSessionConfig.ts b/neode-ui/src/views/appSession/appSessionConfig.ts index 6929150a..675996c3 100644 --- a/neode-ui/src/views/appSession/appSessionConfig.ts +++ b/neode-ui/src/views/appSession/appSessionConfig.ts @@ -34,6 +34,9 @@ export const APP_PORTS: Record = { 'bitcoin-knots': 8334, 'bitcoin-core': 8334, 'bitcoin-ui': 8334, + 'cuprate': 18091, + 'cuprate-ui': 18091, + 'archy-cuprate-ui': 18091, 'electrumx': 50002, 'electrs': 50002, 'archy-electrs-ui': 50002, @@ -153,6 +156,15 @@ export function resolveAppUrl(id: string, routeQueryPath?: string, runtimeUrl?: return appOrigin(8334, id) } + // Cuprate UI is the same companion shape on :18091. The cuprate app itself + // publishes only the restricted RPC (18090) — a raw JSON endpoint, not a + // page — so cuprate launches must land on the companion, never on the + // runtimeUrl a running cuprate reports. + if (id === 'cuprate' || id === 'cuprate-ui' || id === 'archy-cuprate-ui') { + if (import.meta.env.DEV) return '/app/cuprate-ui/' + return appOrigin(18091, id) + } + if (runtimeUrl && id !== 'netbird') { let base = runtimeUrl.replace(/localhost/i, window.location.hostname) // The backend reports runtime URLs as http:// because that is how the app diff --git a/neode-ui/src/views/appSession/generatedAppSessionConfig.ts b/neode-ui/src/views/appSession/generatedAppSessionConfig.ts index 590bb7a0..7051f1b4 100644 --- a/neode-ui/src/views/appSession/generatedAppSessionConfig.ts +++ b/neode-ui/src/views/appSession/generatedAppSessionConfig.ts @@ -9,6 +9,7 @@ export const GENERATED_APP_PORTS: Record = { "bitcoin-ui": 8334, "botfights": 9100, "btcpay-server": 23000, + "cuprate-ui": 18091, "electrs-ui": 50002, "electrumx": 50002, "fedimint": 8175, @@ -54,6 +55,7 @@ export const GENERATED_APP_TITLES: Record = { "btcpay-server": "BTCPay Server", "core-lightning": "Core Lightning (CLN)", "cuprate": "Cuprate", + "cuprate-ui": "Cuprate UI", "electrs-ui": "Electrs UI", "electrumx": "ElectrumX", "fedimint": "Fedimint Guardian", diff --git a/neode-ui/src/views/discover/curatedApps.ts b/neode-ui/src/views/discover/curatedApps.ts index a1aa650e..88ba0885 100644 --- a/neode-ui/src/views/discover/curatedApps.ts +++ b/neode-ui/src/views/discover/curatedApps.ts @@ -123,6 +123,8 @@ const CATALOG_APP_ID_ALIASES: Record = { 'archy-lnd-ui': 'lnd-ui', 'bitcoin-knots': 'bitcoin-ui', 'bitcoin-core': 'bitcoin-ui', + 'cuprate': 'cuprate-ui', + 'archy-cuprate-ui': 'cuprate-ui', 'fedimintd': 'fedimint', 'immich_server': 'immich', } diff --git a/neode-ui/vite.config.ts b/neode-ui/vite.config.ts index cacae92d..33864499 100644 --- a/neode-ui/vite.config.ts +++ b/neode-ui/vite.config.ts @@ -173,6 +173,11 @@ export default defineConfig({ changeOrigin: true, secure: false, }, + '/app/cuprate-ui': { + target: process.env.BACKEND_URL || 'http://localhost:5959', + changeOrigin: true, + secure: false, + }, // Demo mock app UIs (electrumx, lnd, fedimint) + generic notice page. '/app/electrumx': { target: process.env.BACKEND_URL || 'http://localhost:5959', changeOrigin: true, secure: false }, '/app/electrs': { target: process.env.BACKEND_URL || 'http://localhost:5959', changeOrigin: true, secure: false },