yakmesh 2.9.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +637 -0
- package/Caddyfile +77 -0
- package/README.md +119 -29
- package/content/api.js +50 -41
- package/content/index.js +1 -2
- package/content/store.js +323 -177
- package/dashboard/index.html +19 -3
- package/database/replication.js +117 -37
- package/docs/CRYPTO-AGILITY.md +204 -0
- package/docs/MTLS-RESEARCH.md +367 -0
- package/docs/NAMCHE-SPEC.md +681 -0
- package/docs/PEERQUANTA-YAKMESH-INTEGRATION.md +407 -0
- package/docs/PRECISION-DISCLOSURE.md +96 -0
- package/docs/README.md +76 -0
- package/docs/ROADMAP-2.4.0.md +447 -0
- package/docs/ROADMAP-2.5.0.md +244 -0
- package/docs/SECURITY-AUDIT-REPORT.md +306 -0
- package/docs/SST-INTEGRATION.md +712 -0
- package/docs/STEADYWATCH-IMPLEMENTATION.md +303 -0
- package/docs/TERNARY-AUDIT-REPORT.md +247 -0
- package/docs/TME-FAQ.md +221 -0
- package/docs/WHITEPAPER.md +623 -0
- package/docs/adapters.html +1001 -0
- package/docs/advanced-systems.html +1045 -0
- package/docs/annex.html +1046 -0
- package/docs/api.html +970 -0
- package/docs/business/response-templates.md +160 -0
- package/docs/c2c.html +1225 -0
- package/docs/cli.html +1332 -0
- package/docs/configuration.html +1248 -0
- package/docs/darshan.html +1085 -0
- package/docs/dharma.html +966 -0
- package/docs/docs-bundle.html +1075 -0
- package/docs/docs.css +3120 -0
- package/docs/docs.js +556 -0
- package/docs/doko.html +969 -0
- package/docs/geo-proof.html +858 -0
- package/docs/getting-started.html +840 -0
- package/docs/gumba-tutorial.html +1144 -0
- package/docs/gumba.html +1098 -0
- package/docs/index.html +914 -0
- package/docs/jhilke.html +1312 -0
- package/docs/karma.html +1100 -0
- package/docs/katha.html +1037 -0
- package/docs/lama.html +978 -0
- package/docs/mandala.html +1067 -0
- package/docs/mani.html +964 -0
- package/docs/mantra.html +967 -0
- package/docs/mesh.html +1409 -0
- package/docs/nakpak.html +869 -0
- package/docs/namche.html +928 -0
- package/docs/nav-order.json +53 -0
- package/docs/prahari.html +1043 -0
- package/docs/prism-bash.min.js +1 -0
- package/docs/prism-javascript.min.js +1 -0
- package/docs/prism-json.min.js +1 -0
- package/docs/prism-tomorrow.min.css +1 -0
- package/docs/prism.min.js +1 -0
- package/docs/privacy.html +699 -0
- package/docs/quick-reference.html +1181 -0
- package/docs/sakshi.html +1402 -0
- package/docs/sandboxing.md +386 -0
- package/docs/seva.html +911 -0
- package/docs/sherpa.html +871 -0
- package/docs/studio.html +860 -0
- package/docs/stupa.html +995 -0
- package/docs/tailwind.min.css +2 -0
- package/docs/tattva.html +1332 -0
- package/docs/terms.html +686 -0
- package/docs/time-server-deployment.md +166 -0
- package/docs/time-sources.html +1392 -0
- package/docs/tivra.html +1127 -0
- package/docs/trademark-policy.html +686 -0
- package/docs/tribhuj.html +1183 -0
- package/docs/trust-security.html +1029 -0
- package/docs/tutorials/backup-recovery.html +654 -0
- package/docs/tutorials/dashboard.html +604 -0
- package/docs/tutorials/domain-setup.html +605 -0
- package/docs/tutorials/host-website.html +456 -0
- package/docs/tutorials/mesh-network.html +505 -0
- package/docs/tutorials/mobile-access.html +445 -0
- package/docs/tutorials/privacy.html +467 -0
- package/docs/tutorials/raspberry-pi.html +600 -0
- package/docs/tutorials/security-basics.html +539 -0
- package/docs/tutorials/share-files.html +431 -0
- package/docs/tutorials/troubleshooting.html +637 -0
- package/docs/tutorials/trust-karma.html +419 -0
- package/docs/tutorials/yak-protocol.html +456 -0
- package/docs/tutorials.html +1034 -0
- package/docs/vani.html +1270 -0
- package/docs/webserver.html +809 -0
- package/docs/yak-protocol.html +940 -0
- package/docs/yak-timeserver-design.md +475 -0
- package/docs/yakapp.html +1015 -0
- package/docs/ypc27.html +1069 -0
- package/docs/yurt.html +1344 -0
- package/embedded-docs/bundle.js +274 -114
- package/gossip/protocol.js +247 -27
- package/identity/key-resolver.js +262 -0
- package/identity/machine-seed.js +632 -0
- package/identity/node-key.js +669 -368
- package/identity/tribhuj-ratchet.js +506 -0
- package/knowledge-base.js +37 -8
- package/launcher/yakmesh.bat +62 -0
- package/launcher/yakmesh.sh +70 -0
- package/mesh/annex.js +462 -108
- package/mesh/beacon-broadcast.js +4 -1
- package/mesh/darshan.js +17 -5
- package/mesh/gumba.js +47 -13
- package/mesh/jhilke.js +651 -0
- package/mesh/katha.js +5 -2
- package/mesh/nakpak-routing.js +8 -5
- package/mesh/network.js +724 -34
- package/mesh/pulse-sync.js +4 -1
- package/mesh/seva.js +526 -0
- package/mesh/sherpa-discovery.js +89 -8
- package/mesh/sybil-defense.js +19 -5
- package/mesh/temporal-encoder.js +4 -3
- package/mesh/yurt.js +72 -17
- package/models/entropy-sentinel.onnx +0 -0
- package/models/karma-trust.onnx +0 -0
- package/models/manifest.json +43 -0
- package/models/sakshi-anomaly.onnx +0 -0
- package/oracle/code-proof-protocol.js +7 -6
- package/oracle/codebase-lock.js +257 -28
- package/oracle/index.js +74 -15
- package/oracle/ma902-snmp.js +678 -0
- package/oracle/module-sealer.js +5 -3
- package/oracle/packet-checksum.js +201 -0
- package/oracle/ternary-144t.js +714 -0
- package/oracle/ternary-ml.js +481 -0
- package/oracle/time-api.js +239 -0
- package/oracle/time-source.js +137 -47
- package/oracle/validation-oracle-hardened.js +1111 -1071
- package/oracle/validation-oracle.js +4 -2
- package/oracle/ypc27.js +211 -0
- package/package.json +20 -3
- package/protocol/yak-handler.js +35 -9
- package/protocol/yak-protocol.js +6 -5
- package/reference/cpp/yakmesh_mceliece_shard.cpp +168 -0
- package/reference/cpp/yakmesh_ypc27.cpp +179 -0
- package/sbom.json +87 -0
- package/scripts/security-audit.mjs +264 -0
- package/scripts/update-docs-sidebar.cjs +164 -0
- package/security/crypto-config.js +4 -3
- package/security/dharma-moderation.js +4 -3
- package/security/doko-identity.js +193 -143
- package/security/domain-consensus.js +86 -85
- package/security/fs-hardening.js +620 -0
- package/security/hardware-attestation.js +5 -3
- package/security/hybrid-trust.js +227 -87
- package/security/karma-rate-limiter.js +692 -0
- package/security/khata-protocol.js +22 -21
- package/security/khata-trust-integration.js +277 -150
- package/security/memory-safety.js +635 -0
- package/security/mesh-auth.js +11 -10
- package/security/mesh-revocation.js +18 -5
- package/security/namche-gateway.js +298 -69
- package/security/sakshi.js +102 -3
- package/security/sangha.js +770 -0
- package/security/secure-config.js +473 -0
- package/security/silicon-parity.js +13 -10
- package/security/steadywatch.js +1142 -0
- package/security/strike-system.js +32 -3
- package/security/temporal-signing.js +488 -0
- package/security/trit-commitment.js +464 -0
- package/server/crypto/annex.js +247 -0
- package/server/darshan-api.js +343 -0
- package/server/index.js +3259 -362
- package/server/komm-api.js +668 -0
- package/utils/accel.js +2273 -0
- package/utils/ternary-id.js +79 -0
- package/utils/verify-worker.js +57 -0
- package/webserver/index.js +95 -5
- package/assets/yakmesh-logo.png +0 -0
- package/assets/yakmesh-logo.svg +0 -80
- package/assets/yakmesh-logo2.png +0 -0
- package/assets/yakmesh-logo2sm.png +0 -0
- package/assets/ymsm.png +0 -0
- package/scripts/update-docs-nav.cjs +0 -194
- package/update-docs-nav.cjs +0 -18
- package/update-nav.ps1 +0 -16
- package/website/assets/silhouettes/adapters.svg +0 -107
- package/website/assets/silhouettes/api-endpoints.svg +0 -115
- package/website/assets/silhouettes/atomic-clock.svg +0 -83
- package/website/assets/silhouettes/base-camp.svg +0 -81
- package/website/assets/silhouettes/bridge.svg +0 -69
- package/website/assets/silhouettes/docs-bundle.svg +0 -113
- package/website/assets/silhouettes/doko-basket.svg +0 -70
- package/website/assets/silhouettes/fortress.svg +0 -93
- package/website/assets/silhouettes/gateway.svg +0 -54
- package/website/assets/silhouettes/gears.svg +0 -93
- package/website/assets/silhouettes/globe-satellite.svg +0 -67
- package/website/assets/silhouettes/karma-wheel.svg +0 -137
- package/website/assets/silhouettes/lama-council.svg +0 -141
- package/website/assets/silhouettes/mandala-network.svg +0 -169
- package/website/assets/silhouettes/mani-stones.svg +0 -149
- package/website/assets/silhouettes/mantra-wheel.svg +0 -116
- package/website/assets/silhouettes/mesh-nodes.svg +0 -113
- package/website/assets/silhouettes/nakpak.svg +0 -56
- package/website/assets/silhouettes/peak-lightning.svg +0 -73
- package/website/assets/silhouettes/sherpa.svg +0 -69
- package/website/assets/silhouettes/stupa-tower.svg +0 -119
- package/website/assets/silhouettes/tattva-eye.svg +0 -78
- package/website/assets/silhouettes/terminal.svg +0 -74
- package/website/assets/silhouettes/webserver.svg +0 -145
- package/website/assets/silhouettes/yak.svg +0 -78
- package/website/assets/yakmesh-logo.png +0 -0
- package/website/assets/yakmesh-logo.webp +0 -0
- package/website/assets/yakmesh-logo128x140.webp +0 -0
- package/website/assets/yakmesh-logo2.png +0 -0
- package/website/assets/yakmesh-logo2.svg +0 -51
- package/website/assets/yakmesh-logo40x44.webp +0 -0
- package/website/assets/yakmesh.gif +0 -0
- package/website/assets/yakmesh.ico +0 -0
- package/website/assets/yakmesh.jpg +0 -0
- package/website/assets/yakmesh.pdf +0 -0
- package/website/assets/yakmesh.png +0 -0
- package/website/assets/yakmesh.svg +0 -70
- package/website/assets/yakmesh128.webp +0 -0
- package/website/assets/yakmesh32.png +0 -0
- package/website/assets/yakmesh32.svg +0 -65
- package/website/assets/yakmesh32o.ico +0 -2
- package/website/assets/yakmesh32o.svg +0 -65
- package/website/assets/yakmesh32o.svgz +0 -0
package/Caddyfile
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# ═══════════════════════════════════════════════════════════════
|
|
2
|
+
# Yakmesh Caddy Configuration — WSS Reverse Proxy
|
|
3
|
+
# ═══════════════════════════════════════════════════════════════
|
|
4
|
+
#
|
|
5
|
+
# Use this Caddyfile to expose your yakmesh node via WSS (HTTPS/WebSocket).
|
|
6
|
+
# Caddy handles automatic TLS via Let's Encrypt and reverse-proxies
|
|
7
|
+
# WebSocket connections to the local yakmesh WS server.
|
|
8
|
+
#
|
|
9
|
+
# SHERPA will advertise this endpoint in beacons, allowing other nodes
|
|
10
|
+
# (even those behind firewalls) to discover and OUTBOUND connect to you.
|
|
11
|
+
#
|
|
12
|
+
# Prerequisites:
|
|
13
|
+
# 1. Domain pointing to this machine (e.g., mesh.yakmesh.dev)
|
|
14
|
+
# 2. Port 443 and 80 accessible (port 80 needed for ACME challenge)
|
|
15
|
+
# 3. Caddy installed: https://caddyserver.com/docs/install
|
|
16
|
+
#
|
|
17
|
+
# Usage:
|
|
18
|
+
# caddy run --config Caddyfile
|
|
19
|
+
#
|
|
20
|
+
# Set env var so SHERPA advertises this WSS endpoint:
|
|
21
|
+
# YAKMESH_WS_ENDPOINT=wss://mesh.yakmesh.dev
|
|
22
|
+
# YAKMESH_SELF_ENDPOINT=https://mesh.yakmesh.dev
|
|
23
|
+
# ═══════════════════════════════════════════════════════════════
|
|
24
|
+
|
|
25
|
+
# Replace with your domain
|
|
26
|
+
mesh.yakmesh.dev {
|
|
27
|
+
# WebSocket reverse proxy — mesh peering
|
|
28
|
+
# Matches WebSocket upgrade requests
|
|
29
|
+
@websocket {
|
|
30
|
+
header Connection *Upgrade*
|
|
31
|
+
header Upgrade websocket
|
|
32
|
+
}
|
|
33
|
+
handle @websocket {
|
|
34
|
+
reverse_proxy localhost:9080
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
# SHERPA beacon — live peer discovery data
|
|
38
|
+
handle /.well-known/yakmesh/beacon {
|
|
39
|
+
reverse_proxy localhost:3080
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
# Mesh relay — HTTP message bridge
|
|
43
|
+
handle /mesh/relay* {
|
|
44
|
+
reverse_proxy localhost:3080
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
# Health endpoint
|
|
48
|
+
handle /mesh/health {
|
|
49
|
+
reverse_proxy localhost:3080/health
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
# Dashboard (optional — remove in production)
|
|
53
|
+
handle /dashboard* {
|
|
54
|
+
reverse_proxy localhost:3080
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
# Default: serve documentation
|
|
58
|
+
handle {
|
|
59
|
+
reverse_proxy localhost:3080
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
# Logging
|
|
63
|
+
log {
|
|
64
|
+
output file /var/log/caddy/yakmesh.log {
|
|
65
|
+
roll_size 10mb
|
|
66
|
+
roll_keep 5
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
# Security headers
|
|
71
|
+
header {
|
|
72
|
+
X-Content-Type-Options nosniff
|
|
73
|
+
X-Frame-Options DENY
|
|
74
|
+
Referrer-Policy strict-origin-when-cross-origin
|
|
75
|
+
-Server
|
|
76
|
+
}
|
|
77
|
+
}
|
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
<img src="https://yakmesh.dev/assets/yakmesh-logo2.png" alt="YAKMESH" width="200">
|
|
3
3
|
|
|
4
|
-
<h1>🏔️ YAKMESH
|
|
4
|
+
<h1>🏔️ YAKMESH™ v3.0.0 — The Summit Release</h1>
|
|
5
5
|
|
|
6
6
|
<p><strong>Yielding Atomic Kernel Modular Encryption Secured Hub</strong></p>
|
|
7
7
|
|
|
@@ -10,12 +10,14 @@
|
|
|
10
10
|
<a href="https://nodejs.org"><img src="https://img.shields.io/badge/Node.js-18+-green.svg" alt="Node.js"></a>
|
|
11
11
|
<a href="https://csrc.nist.gov/projects/post-quantum-cryptography"><img src="https://img.shields.io/badge/Crypto-Post--Quantum-blue.svg" alt="Post-Quantum"></a>
|
|
12
12
|
<a href="https://www.npmjs.com/package/yakmesh"><img src="https://img.shields.io/npm/v/yakmesh.svg" alt="npm version"></a>
|
|
13
|
+
<img src="https://img.shields.io/badge/version-3.0.0-purple.svg" alt="v3.0.0">
|
|
14
|
+
<img src="https://img.shields.io/badge/Protocol_Layers-30-orange.svg" alt="30-Layer Stack">
|
|
13
15
|
</p>
|
|
14
16
|
</div>
|
|
15
17
|
|
|
16
18
|
---
|
|
17
19
|
|
|
18
|
-
YAKMESH is a
|
|
20
|
+
YAKMESH is a post-quantum secure P2P mesh network with a 30-layer protocol stack, heterogeneous GPU+NPU compute scheduling, and hardware-anchored precision timing. Built for the 2026 threat landscape with NIST FIPS 204/203 cryptography at every layer, YAKMESH provides a "sturdy" substrate for distributed systems that cannot afford to fail.
|
|
19
21
|
|
|
20
22
|
> **📚 Full documentation: [yakmesh.dev](https://yakmesh.dev)** | **[docs/](docs/)** for specifications
|
|
21
23
|
|
|
@@ -38,29 +40,66 @@ await node.start();
|
|
|
38
40
|
|
|
39
41
|
## Features
|
|
40
42
|
|
|
41
|
-
|
|
42
|
-
- 🔮 **TATTVA Oracle** - Self-verifying validation without external trust
|
|
43
|
-
- 🌐 **Mesh Networking** - P2P WebSocket communication with gossip protocol
|
|
44
|
-
- ⏱️ **Precision Timing** - Support for atomic clocks, GPS, PTP, NTP
|
|
45
|
-
- 🧭 **NAMCHE Gateway** - 7-gate mathematical identity verification
|
|
46
|
-
- 🏔️ **SHERPA Discovery** - Decentralized peer discovery
|
|
47
|
-
- 🔐 **ANNEX Channels** - ML-KEM768 encrypted P2P with forward secrecy
|
|
48
|
-
- 🌍 **Geographic Proof** - Speed-of-light exclusion zones
|
|
43
|
+
### Cryptography & Identity
|
|
49
44
|
|
|
50
|
-
|
|
45
|
+
- 🔒 **Post-Quantum Secure** — ML-DSA-65 (FIPS 204) signatures, ML-KEM-768 (FIPS 203) key encapsulation
|
|
46
|
+
- 🧬 **144-Trit Identity** — Ternary identity system with balanced-ternary encoding (YPC-27)
|
|
47
|
+
- 🔐 **ANNEX Channels** — ML-KEM-768 encrypted P2P sessions with forward secrecy (TRIBHUJ ratchet)
|
|
48
|
+
- 🧭 **NAMCHE Gateway** — 7-gate mathematical identity verification
|
|
49
|
+
|
|
50
|
+
### Networking & Discovery
|
|
51
|
+
|
|
52
|
+
- 🌐 **Mesh Networking** — P2P WebSocket mesh with epidemic gossip protocol
|
|
53
|
+
- 🏔️ **SHERPA Discovery** — Decentralized peer discovery with DNS beacon broadcast
|
|
54
|
+
- 📦 **NAKPAK Routing** — Efficient binary message routing with checksum verification
|
|
55
|
+
- 💬 **KOMM Stack** — Real-time communication layer (VANI messaging, GUMBA channels, KATHA sessions)
|
|
56
|
+
|
|
57
|
+
### Validation & Consensus
|
|
58
|
+
|
|
59
|
+
- 🔮 **TATTVA Oracle** — Self-verifying codebase validation; the code IS the network identity
|
|
60
|
+
- 📜 **DHARMA Consensus** — Multi-phase consensus engine with phase-epoch timing
|
|
61
|
+
- 👁️ **SAKSHI Witness** — Distributed witness protocol for transaction attestation
|
|
62
|
+
- 🌍 **Geographic Proof** — Speed-of-light exclusion zones for physical locality verification
|
|
63
|
+
|
|
64
|
+
### Compute & Acceleration
|
|
65
|
+
|
|
66
|
+
- ⚡ **GPU+NPU Acceleration** — Heterogeneous compute via ONNX Runtime (DirectML, CUDA, CPU fallback)
|
|
67
|
+
- 📊 **ComputeScheduler** — Priority-based task scheduling (CRITICAL → HIGH → NORMAL → LOW)
|
|
68
|
+
- 🧠 **SEVA Compute** — Distributed ML inference mesh across network peers
|
|
69
|
+
|
|
70
|
+
### Security & Monitoring
|
|
71
|
+
|
|
72
|
+
- 🛡️ **SANGHA Security** — Community-driven threat circulation and collective defense
|
|
73
|
+
- ⏱️ **Precision Timing** — GPS atomic clocks (MA-902), PTP, NTP with sub-millisecond sync
|
|
74
|
+
- 📡 **DARSHAN Telemetry** — Real-time network visibility and diagnostics
|
|
75
|
+
- 🔍 **STEADYWATCH** — Continuous uptime and integrity monitoring
|
|
76
|
+
- ⚖️ **KARMA Rate Limiter** — Behavior-based reputation rate limiting
|
|
77
|
+
|
|
78
|
+
> See [yakmesh.dev](https://yakmesh.dev) for the complete 30-layer protocol documentation
|
|
51
79
|
|
|
52
80
|
## Architecture
|
|
53
81
|
|
|
54
82
|
```
|
|
55
|
-
yakmesh/
|
|
56
|
-
├──
|
|
57
|
-
├──
|
|
58
|
-
├──
|
|
83
|
+
yakmesh-node/
|
|
84
|
+
├── server/ # HTTP/WS server (~3,300 lines), all API routes
|
|
85
|
+
├── security/ # NAMCHE gateway, SANGHA, SAKSHI, trust models, geo-proof
|
|
86
|
+
├── oracle/ # TATTVA validation, consensus engine, code-proof, phase-epoch
|
|
87
|
+
├── identity/ # PQ key management, TRIBHUJ ratchet, 144T identity
|
|
88
|
+
├── mesh/ # SHERPA discovery, NAKPAK routing, ANNEX sessions, pulse-sync
|
|
59
89
|
├── gossip/ # Epidemic-style message propagation
|
|
60
|
-
├── protocol/ # STUPA, LAMA, MANI, KARMA, MANDALA
|
|
61
|
-
├──
|
|
62
|
-
├──
|
|
63
|
-
|
|
90
|
+
├── protocol/ # STUPA, LAMA, MANI, KARMA, MANDALA protocol layers
|
|
91
|
+
├── utils/ # Hardware acceleration, ComputeScheduler (GPU+NPU)
|
|
92
|
+
├── cli/ # Command-line interface
|
|
93
|
+
├── dashboard/ # Web-based monitoring UI
|
|
94
|
+
├── database/ # SQLite persistence layer
|
|
95
|
+
├── content/ # Distributed content system
|
|
96
|
+
├── models/ # ONNX ML models for inference
|
|
97
|
+
├── embedded-docs/ # GRANTH documentation bundle (served at /docs)
|
|
98
|
+
├── adapters/ # Platform integration plugins (BYOND, etc.)
|
|
99
|
+
├── templates/ # Configuration templates
|
|
100
|
+
├── launcher/ # Process management and startup
|
|
101
|
+
├── webserver/ # Static web serving
|
|
102
|
+
└── yakbot/ # Bot integration
|
|
64
103
|
```
|
|
65
104
|
|
|
66
105
|
## Network Identity
|
|
@@ -78,16 +117,68 @@ import { deriveNetworkName, deriveVerificationPhrase } from 'yakmesh/oracle/netw
|
|
|
78
117
|
|
|
79
118
|
Full API documentation at [yakmesh.dev/docs/api](https://yakmesh.dev/docs/api)
|
|
80
119
|
|
|
120
|
+
### Core
|
|
121
|
+
|
|
122
|
+
| Endpoint | Description |
|
|
123
|
+
|----------|-------------|
|
|
124
|
+
| `GET /health` | Node health status |
|
|
125
|
+
| `GET /node` | Node identity info |
|
|
126
|
+
| `GET /peers` | Connected peers |
|
|
127
|
+
| `GET /metrics` | Prometheus-compatible metrics |
|
|
128
|
+
| `GET /dashboard` | Web monitoring UI |
|
|
129
|
+
|
|
130
|
+
### Oracle & Consensus
|
|
131
|
+
|
|
81
132
|
| Endpoint | Description |
|
|
82
133
|
|----------|-------------|
|
|
83
|
-
|
|
|
84
|
-
|
|
|
85
|
-
|
|
|
86
|
-
|
|
|
87
|
-
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
134
|
+
| `GET /oracle/status` | Oracle integrity check |
|
|
135
|
+
| `GET /oracle/consensus` | Consensus state |
|
|
136
|
+
| `GET /oracle/peers` | Oracle peer list |
|
|
137
|
+
| `POST /oracle/challenge` | Challenge-response verification |
|
|
138
|
+
| `POST /oracle/submit` | Submit oracle data |
|
|
139
|
+
|
|
140
|
+
### Network & Mesh
|
|
141
|
+
|
|
142
|
+
| Endpoint | Description |
|
|
143
|
+
|----------|-------------|
|
|
144
|
+
| `GET /network/identity` | Network identity |
|
|
145
|
+
| `GET /network/status` | Network state |
|
|
146
|
+
| `GET /network/handshake` | Handshake data |
|
|
147
|
+
| `POST /connect` | Initiate peer connection |
|
|
148
|
+
| `POST /mesh/relay` | Relay message to peers |
|
|
149
|
+
| `GET /gossip` | Gossip state |
|
|
150
|
+
| `GET /discovered` | Discovered nodes |
|
|
151
|
+
|
|
152
|
+
### Protocol Subsystems
|
|
153
|
+
|
|
154
|
+
| Endpoint | Description |
|
|
155
|
+
|----------|-------------|
|
|
156
|
+
| `/komm/*` | KOMM real-time communication |
|
|
157
|
+
| `/darshan/*` | DARSHAN network telemetry |
|
|
158
|
+
| `GET /sherpa/status` | SHERPA peer discovery status |
|
|
159
|
+
| `GET /nakpak/status` | NAKPAK routing status |
|
|
160
|
+
| `GET /annex/status` | ANNEX encrypted channel status |
|
|
161
|
+
| `GET /sakshi/status` | SAKSHI witness protocol status |
|
|
162
|
+
| `GET /api/sangha` | SANGHA community security |
|
|
163
|
+
| `/content/*` | Content API |
|
|
164
|
+
|
|
165
|
+
### Timing & Compute
|
|
166
|
+
|
|
167
|
+
| Endpoint | Description |
|
|
168
|
+
|----------|-------------|
|
|
169
|
+
| `GET /time/status` | Time source detection |
|
|
170
|
+
| `GET /time/capabilities` | Timing hardware capabilities |
|
|
171
|
+
| `GET /api/time` | Full time data |
|
|
172
|
+
| `GET /accel` | Hardware acceleration status |
|
|
173
|
+
| `GET /accel/telemetry` | GPU/NPU telemetry |
|
|
174
|
+
| `GET /scheduler` | ComputeScheduler state |
|
|
175
|
+
| `GET /steadywatch` | Uptime monitoring |
|
|
176
|
+
|
|
177
|
+
### Security
|
|
178
|
+
|
|
179
|
+
| Endpoint | Description |
|
|
180
|
+
|----------|-------------|
|
|
181
|
+
| `GET /security/namche/gates` | Gateway verification status |
|
|
91
182
|
|
|
92
183
|
## License
|
|
93
184
|
|
|
@@ -99,7 +190,7 @@ See [TRADEMARK.md](TRADEMARK.md) for trademark usage policy.
|
|
|
99
190
|
---
|
|
100
191
|
|
|
101
192
|
<div align="center">
|
|
102
|
-
<sub>Built with quantum principles. Secured by math.</sub>
|
|
193
|
+
<sub>Built with quantum principles. Secured by math. 30 layers deep.</sub>
|
|
103
194
|
<br><br>
|
|
104
195
|
<strong><a href="https://yakmesh.dev">yakmesh.dev</a></strong>
|
|
105
196
|
<br><br>
|
|
@@ -114,4 +205,3 @@ See [TRADEMARK.md](TRADEMARK.md) for trademark usage policy.
|
|
|
114
205
|
<br>
|
|
115
206
|
<sub>YAKMESH™ is a trademark of PeerQuanta, application pending (Serial No. 99594620).</sub>
|
|
116
207
|
</div>
|
|
117
|
-
|
package/content/api.js
CHANGED
|
@@ -2,10 +2,14 @@
|
|
|
2
2
|
* YAKMESH™ Public Content API
|
|
3
3
|
* HTTP endpoints for public content delivery
|
|
4
4
|
*
|
|
5
|
+
* Content integrity = SHA3-256 hash match.
|
|
6
|
+
* Content authorship = publisher ML-DSA-65 signature.
|
|
7
|
+
* No voting, no quorum, no consensus proofs.
|
|
8
|
+
*
|
|
5
9
|
* Public (no auth required):
|
|
6
10
|
* - GET /content/:hash - Fetch content by hash
|
|
7
11
|
* - GET /content/:hash/meta - Fetch metadata only
|
|
8
|
-
* - GET /content/:hash/
|
|
12
|
+
* - GET /content/:hash/integrity - Fetch integrity info (hash + publisher sig)
|
|
9
13
|
* - GET /content/list - List available content
|
|
10
14
|
*
|
|
11
15
|
* Authenticated (rate limited):
|
|
@@ -18,18 +22,19 @@
|
|
|
18
22
|
*/
|
|
19
23
|
|
|
20
24
|
import { Router } from 'express';
|
|
21
|
-
import { ContentStore, ContentType, ContentStatus, computeContentHash } from './store.js';
|
|
25
|
+
import { ContentStore, ContentType, ContentStatus, computeContentHash, isTritAddress } from './store.js';
|
|
22
26
|
|
|
23
27
|
/**
|
|
24
28
|
* Create content API router
|
|
25
29
|
*/
|
|
26
30
|
export function createContentAPI(contentStore, options = {}) {
|
|
27
31
|
const router = Router();
|
|
28
|
-
|
|
32
|
+
|
|
29
33
|
const {
|
|
30
34
|
writeLimiter,
|
|
31
35
|
readLimiter,
|
|
32
36
|
validateString,
|
|
37
|
+
requirePeerAuth,
|
|
33
38
|
} = options;
|
|
34
39
|
|
|
35
40
|
// =========================================
|
|
@@ -38,22 +43,20 @@ export function createContentAPI(contentStore, options = {}) {
|
|
|
38
43
|
|
|
39
44
|
/**
|
|
40
45
|
* GET /content/:hash
|
|
41
|
-
* Fetch content by hash
|
|
46
|
+
* Fetch content by hash
|
|
42
47
|
*
|
|
43
48
|
* Query params:
|
|
44
|
-
* - proof=1 : Include consensus proof in response headers
|
|
45
49
|
* - download=1 : Force download (Content-Disposition)
|
|
46
50
|
*/
|
|
47
51
|
router.get('/:hash', readLimiter, (req, res) => {
|
|
48
52
|
const { hash } = req.params;
|
|
49
|
-
const includeProof = req.query.proof === '1';
|
|
50
53
|
const download = req.query.download === '1';
|
|
51
54
|
|
|
52
55
|
// Get content with metadata
|
|
53
56
|
const result = contentStore.getWithProof(hash);
|
|
54
|
-
|
|
57
|
+
|
|
55
58
|
if (!result) {
|
|
56
|
-
return res.status(404).json({
|
|
59
|
+
return res.status(404).json({
|
|
57
60
|
error: 'Content not found',
|
|
58
61
|
hash,
|
|
59
62
|
hint: 'Content may not have synced yet. Try again later.',
|
|
@@ -64,19 +67,22 @@ export function createContentAPI(contentStore, options = {}) {
|
|
|
64
67
|
res.setHeader('Content-Type', result.meta?.contentType || 'application/octet-stream');
|
|
65
68
|
res.setHeader('Content-Length', result.meta?.size || result.content.length);
|
|
66
69
|
res.setHeader('X-Content-Hash', result.hash);
|
|
70
|
+
res.setHeader('X-Content-Hash-144T', result.hash144t || result.meta?.hash144t || '');
|
|
67
71
|
res.setHeader('X-Content-Status', result.meta?.status || 'unknown');
|
|
68
|
-
|
|
69
|
-
// Cache headers (
|
|
72
|
+
|
|
73
|
+
// Cache headers (verified content = cache forever)
|
|
70
74
|
if (result.verified) {
|
|
71
75
|
res.setHeader('Cache-Control', 'public, max-age=31536000, immutable');
|
|
76
|
+
res.setHeader('X-Verified', 'true');
|
|
72
77
|
} else {
|
|
73
78
|
res.setHeader('Cache-Control', 'public, max-age=60');
|
|
79
|
+
res.setHeader('X-Verified', 'false');
|
|
74
80
|
}
|
|
75
81
|
|
|
76
|
-
//
|
|
77
|
-
if (
|
|
78
|
-
res.setHeader('X-
|
|
79
|
-
res.setHeader('X-
|
|
82
|
+
// Publisher signature header
|
|
83
|
+
if (result.meta?.publisherSignature) {
|
|
84
|
+
res.setHeader('X-Publisher-Signature', result.meta.publisherSignature);
|
|
85
|
+
res.setHeader('X-Published-By', result.meta.publishedBy || 'unknown');
|
|
80
86
|
}
|
|
81
87
|
|
|
82
88
|
// Download disposition
|
|
@@ -95,7 +101,7 @@ export function createContentAPI(contentStore, options = {}) {
|
|
|
95
101
|
router.get('/:hash/meta', readLimiter, (req, res) => {
|
|
96
102
|
const { hash } = req.params;
|
|
97
103
|
const meta = contentStore.getMeta(hash);
|
|
98
|
-
|
|
104
|
+
|
|
99
105
|
if (!meta) {
|
|
100
106
|
return res.status(404).json({ error: 'Content not found', hash });
|
|
101
107
|
}
|
|
@@ -104,30 +110,31 @@ export function createContentAPI(contentStore, options = {}) {
|
|
|
104
110
|
});
|
|
105
111
|
|
|
106
112
|
/**
|
|
107
|
-
* GET /content/:hash/
|
|
108
|
-
* Fetch
|
|
113
|
+
* GET /content/:hash/integrity
|
|
114
|
+
* Fetch integrity info for content verification
|
|
115
|
+
* Returns hash, publisher identity, publisher signature, and verification status.
|
|
116
|
+
* Any client can independently verify: hash(content) === hash AND
|
|
117
|
+
* verify(hash, publisherSignature, publisherPubKey) === true.
|
|
109
118
|
*/
|
|
110
|
-
router.get('/:hash/
|
|
119
|
+
router.get('/:hash/integrity', readLimiter, (req, res) => {
|
|
111
120
|
const { hash } = req.params;
|
|
112
121
|
const meta = contentStore.getMeta(hash);
|
|
113
|
-
|
|
122
|
+
|
|
114
123
|
if (!meta) {
|
|
115
124
|
return res.status(404).json({ error: 'Content not found', hash });
|
|
116
125
|
}
|
|
117
126
|
|
|
118
|
-
if (!meta.consensusProof) {
|
|
119
|
-
return res.status(404).json({
|
|
120
|
-
error: 'No consensus proof yet',
|
|
121
|
-
hash,
|
|
122
|
-
status: meta.status,
|
|
123
|
-
hint: 'Content may still be pending consensus.',
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
|
|
127
127
|
res.json({
|
|
128
|
-
hash,
|
|
128
|
+
hash: meta.hash,
|
|
129
|
+
hash144t: meta.hash144t,
|
|
130
|
+
ioName: meta.ioName,
|
|
129
131
|
verified: meta.status === ContentStatus.VERIFIED,
|
|
130
|
-
|
|
132
|
+
status: meta.status,
|
|
133
|
+
publishedBy: meta.publishedBy,
|
|
134
|
+
publisherSignature: meta.publisherSignature || null,
|
|
135
|
+
contentType: meta.contentType,
|
|
136
|
+
size: meta.size,
|
|
137
|
+
createdAt: meta.createdAt,
|
|
131
138
|
});
|
|
132
139
|
});
|
|
133
140
|
|
|
@@ -143,7 +150,7 @@ export function createContentAPI(contentStore, options = {}) {
|
|
|
143
150
|
*/
|
|
144
151
|
router.get('/', readLimiter, (req, res) => {
|
|
145
152
|
const { tag, status, limit = 100, offset = 0 } = req.query;
|
|
146
|
-
|
|
153
|
+
|
|
147
154
|
const items = contentStore.list({
|
|
148
155
|
tag,
|
|
149
156
|
status,
|
|
@@ -164,7 +171,7 @@ export function createContentAPI(contentStore, options = {}) {
|
|
|
164
171
|
*/
|
|
165
172
|
router.head('/:hash', readLimiter, (req, res) => {
|
|
166
173
|
const { hash } = req.params;
|
|
167
|
-
|
|
174
|
+
|
|
168
175
|
if (contentStore.has(hash)) {
|
|
169
176
|
const meta = contentStore.getMeta(hash);
|
|
170
177
|
res.setHeader('Content-Type', meta?.contentType || 'application/octet-stream');
|
|
@@ -199,7 +206,7 @@ export function createContentAPI(contentStore, options = {}) {
|
|
|
199
206
|
* - name: optional name
|
|
200
207
|
* - tags: comma-separated tags
|
|
201
208
|
*/
|
|
202
|
-
router.post('/publish', writeLimiter, async (req, res) => {
|
|
209
|
+
router.post('/publish', writeLimiter, requirePeerAuth, async (req, res) => {
|
|
203
210
|
try {
|
|
204
211
|
let content;
|
|
205
212
|
let options = {};
|
|
@@ -216,7 +223,7 @@ export function createContentAPI(contentStore, options = {}) {
|
|
|
216
223
|
tags: req.body.tags || [],
|
|
217
224
|
ttl: req.body.ttl || 0,
|
|
218
225
|
};
|
|
219
|
-
}
|
|
226
|
+
}
|
|
220
227
|
// Handle raw body
|
|
221
228
|
else if (req.body && Buffer.isBuffer(req.body)) {
|
|
222
229
|
content = req.body;
|
|
@@ -245,9 +252,11 @@ export function createContentAPI(contentStore, options = {}) {
|
|
|
245
252
|
res.status(201).json({
|
|
246
253
|
success: true,
|
|
247
254
|
hash: result.hash,
|
|
255
|
+
hash144t: result.hash144t,
|
|
256
|
+
ioName: result.ioName,
|
|
248
257
|
status: result.status,
|
|
249
258
|
meta: result.meta?.toJSON ? result.meta.toJSON() : result.meta,
|
|
250
|
-
url: `/content/${result.hash}`,
|
|
259
|
+
url: `/content/${result.hash144t || result.hash}`,
|
|
251
260
|
});
|
|
252
261
|
} catch (error) {
|
|
253
262
|
res.status(500).json({ error: error.message });
|
|
@@ -260,7 +269,7 @@ export function createContentAPI(contentStore, options = {}) {
|
|
|
260
269
|
*/
|
|
261
270
|
router.post('/request', writeLimiter, async (req, res) => {
|
|
262
271
|
const { hash } = req.body;
|
|
263
|
-
|
|
272
|
+
|
|
264
273
|
if (!hash) {
|
|
265
274
|
return res.status(400).json({ error: 'Hash required' });
|
|
266
275
|
}
|
|
@@ -277,7 +286,7 @@ export function createContentAPI(contentStore, options = {}) {
|
|
|
277
286
|
|
|
278
287
|
// Request from mesh
|
|
279
288
|
const result = await contentStore.request(hash);
|
|
280
|
-
|
|
289
|
+
|
|
281
290
|
res.json({
|
|
282
291
|
found: true,
|
|
283
292
|
local: false,
|
|
@@ -297,9 +306,9 @@ export function createContentAPI(contentStore, options = {}) {
|
|
|
297
306
|
* DELETE /content/:hash
|
|
298
307
|
* Remove content (local only - cannot remove from mesh)
|
|
299
308
|
*/
|
|
300
|
-
router.delete('/:hash', writeLimiter, (req, res) => {
|
|
309
|
+
router.delete('/:hash', writeLimiter, requirePeerAuth, (req, res) => {
|
|
301
310
|
const { hash } = req.params;
|
|
302
|
-
|
|
311
|
+
|
|
303
312
|
if (!contentStore.has(hash)) {
|
|
304
313
|
return res.status(404).json({ error: 'Content not found', hash });
|
|
305
314
|
}
|
|
@@ -329,13 +338,13 @@ export function createContentAPI(contentStore, options = {}) {
|
|
|
329
338
|
*/
|
|
330
339
|
router.post('/verify', readLimiter, (req, res) => {
|
|
331
340
|
const content = req.body.content || req.body;
|
|
332
|
-
|
|
341
|
+
|
|
333
342
|
if (!content) {
|
|
334
343
|
return res.status(400).json({ error: 'Content required' });
|
|
335
344
|
}
|
|
336
345
|
|
|
337
346
|
const hash = computeContentHash(content);
|
|
338
|
-
|
|
347
|
+
|
|
339
348
|
res.json({
|
|
340
349
|
hash,
|
|
341
350
|
exists: contentStore.has(hash),
|
package/content/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* YAKMESH™ Content Module
|
|
3
|
-
* Content-addressed storage with
|
|
3
|
+
* Content-addressed storage with integrity verification
|
|
4
4
|
*
|
|
5
5
|
* @module content
|
|
6
6
|
* @license MIT
|
|
@@ -12,7 +12,6 @@ export {
|
|
|
12
12
|
ContentType,
|
|
13
13
|
ContentStatus,
|
|
14
14
|
ContentMetadata,
|
|
15
|
-
ConsensusProof,
|
|
16
15
|
computeContentHash,
|
|
17
16
|
deriveContentName,
|
|
18
17
|
} from './store.js';
|