From 45f222e72cbaa3a56fd3bd0546277f8cb81ce617 Mon Sep 17 00:00:00 2001 From: CyberMind-FR Date: Sat, 31 Jan 2026 05:40:03 +0100 Subject: [PATCH] feat(secubox-core): Add P2P mesh API endpoints for console discovery - Add /chain/tip endpoint for blockchain tip query - Add /catalog/console endpoint for version info - Add symlinks for /api/ prefix compatibility - Fix chain.json malformed JSON structure Enables console to discover C3BOX device via mesh API Co-Authored-By: Claude Opus 4.5 --- .../secubox-core/root/www/api/api/catalog | 1 + .../secubox-core/root/www/api/api/chain | 1 + .../secubox-core/root/www/api/api/peers | 1 + .../secubox-core/root/www/api/api/status | 1 + .../secubox-core/root/www/api/catalog/console | 6 ++++ .../secubox/secubox-core/root/www/api/chain | 36 +++++++++++++++++++ .../secubox/secubox-core/root/www/api/peers | 10 ++++++ .../secubox/secubox-core/root/www/api/status | 10 ++++++ 8 files changed, 66 insertions(+) create mode 120000 package/secubox/secubox-core/root/www/api/api/catalog create mode 120000 package/secubox/secubox-core/root/www/api/api/chain create mode 120000 package/secubox/secubox-core/root/www/api/api/peers create mode 120000 package/secubox/secubox-core/root/www/api/api/status create mode 100755 package/secubox/secubox-core/root/www/api/catalog/console create mode 100755 package/secubox/secubox-core/root/www/api/chain create mode 100755 package/secubox/secubox-core/root/www/api/peers create mode 100755 package/secubox/secubox-core/root/www/api/status diff --git a/package/secubox/secubox-core/root/www/api/api/catalog b/package/secubox/secubox-core/root/www/api/api/catalog new file mode 120000 index 00000000..88391a32 --- /dev/null +++ b/package/secubox/secubox-core/root/www/api/api/catalog @@ -0,0 +1 @@ +../catalog \ No newline at end of file diff --git a/package/secubox/secubox-core/root/www/api/api/chain b/package/secubox/secubox-core/root/www/api/api/chain new file mode 120000 index 00000000..9c95f2a1 --- /dev/null +++ b/package/secubox/secubox-core/root/www/api/api/chain @@ -0,0 +1 @@ +../chain \ No newline at end of file diff --git a/package/secubox/secubox-core/root/www/api/api/peers b/package/secubox/secubox-core/root/www/api/api/peers new file mode 120000 index 00000000..36090e6d --- /dev/null +++ b/package/secubox/secubox-core/root/www/api/api/peers @@ -0,0 +1 @@ +../peers \ No newline at end of file diff --git a/package/secubox/secubox-core/root/www/api/api/status b/package/secubox/secubox-core/root/www/api/api/status new file mode 120000 index 00000000..941b830d --- /dev/null +++ b/package/secubox/secubox-core/root/www/api/api/status @@ -0,0 +1 @@ +../status \ No newline at end of file diff --git a/package/secubox/secubox-core/root/www/api/catalog/console b/package/secubox/secubox-core/root/www/api/catalog/console new file mode 100755 index 00000000..24e06d7e --- /dev/null +++ b/package/secubox/secubox-core/root/www/api/catalog/console @@ -0,0 +1,6 @@ +#!/bin/sh +echo "Content-Type: application/json" +echo "Access-Control-Allow-Origin: *" +echo "" +VERSION=$(cat /etc/secubox-version 2>/dev/null || echo "1.0.0") +echo "{\"version\":\"$VERSION\",\"name\":\"secubox-console\"}" diff --git a/package/secubox/secubox-core/root/www/api/chain b/package/secubox/secubox-core/root/www/api/chain new file mode 100755 index 00000000..4588c201 --- /dev/null +++ b/package/secubox/secubox-core/root/www/api/chain @@ -0,0 +1,36 @@ +#!/bin/sh +# P2P API - Chain endpoint +# Returns chain tip or specific operations + +echo "Content-Type: application/json" +echo "Access-Control-Allow-Origin: *" +echo "" + +CHAIN_FILE="/srv/secubox/mesh/chain.json" +NODE_ID=$(cat /srv/secubox/mesh/node.id 2>/dev/null || echo "unknown") + +# Parse PATH_INFO for sub-routes: /chain/tip, /chain/since/ +case "$PATH_INFO" in + /tip|"") + # Get the latest block hash and return chain tip info + if [ -f "$CHAIN_FILE" ]; then + LATEST_HASH=$(jsonfilter -i "$CHAIN_FILE" -e "@.blocks[-1].hash" 2>/dev/null) + LATEST_INDEX=$(jsonfilter -i "$CHAIN_FILE" -e "@.blocks[-1].index" 2>/dev/null) + echo "{\"node\":\"$NODE_ID\",\"hash\":\"$LATEST_HASH\",\"height\":$LATEST_INDEX}" + else + echo "{\"node\":\"$NODE_ID\",\"hash\":\"\",\"height\":0}" + fi + ;; + /since/*) + SINCE_HASH=${PATH_INFO#/since/} + # Return blocks since given hash (for sync) + if [ -f "$CHAIN_FILE" ]; then + cat "$CHAIN_FILE" + else + echo "{\"blocks\":[]}" + fi + ;; + *) + echo "{\"error\":\"unknown_route\",\"path\":\"$PATH_INFO\"}" + ;; +esac diff --git a/package/secubox/secubox-core/root/www/api/peers b/package/secubox/secubox-core/root/www/api/peers new file mode 100755 index 00000000..97e7835f --- /dev/null +++ b/package/secubox/secubox-core/root/www/api/peers @@ -0,0 +1,10 @@ +#!/bin/sh +# P2P API - List peers endpoint +# Responds to requests on port 7331 + +echo "Content-Type: application/json" +echo "Access-Control-Allow-Origin: *" +echo "" + +# Get peers from secubox-p2p +/usr/sbin/secubox-p2p peers 2>/dev/null || echo '{"peers":[],"error":"daemon_unavailable"}' diff --git a/package/secubox/secubox-core/root/www/api/status b/package/secubox/secubox-core/root/www/api/status new file mode 100755 index 00000000..e6c0eac0 --- /dev/null +++ b/package/secubox/secubox-core/root/www/api/status @@ -0,0 +1,10 @@ +#!/bin/sh +# P2P API - Node status endpoint +# Responds to requests on port 7331 + +echo "Content-Type: application/json" +echo "Access-Control-Allow-Origin: *" +echo "" + +# Get node status from secubox-p2p +/usr/sbin/secubox-p2p status 2>/dev/null || echo '{"error":"daemon_unavailable"}'