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 },