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.
Files changed (225) hide show
  1. package/CHANGELOG.md +637 -0
  2. package/Caddyfile +77 -0
  3. package/README.md +119 -29
  4. package/content/api.js +50 -41
  5. package/content/index.js +1 -2
  6. package/content/store.js +323 -177
  7. package/dashboard/index.html +19 -3
  8. package/database/replication.js +117 -37
  9. package/docs/CRYPTO-AGILITY.md +204 -0
  10. package/docs/MTLS-RESEARCH.md +367 -0
  11. package/docs/NAMCHE-SPEC.md +681 -0
  12. package/docs/PEERQUANTA-YAKMESH-INTEGRATION.md +407 -0
  13. package/docs/PRECISION-DISCLOSURE.md +96 -0
  14. package/docs/README.md +76 -0
  15. package/docs/ROADMAP-2.4.0.md +447 -0
  16. package/docs/ROADMAP-2.5.0.md +244 -0
  17. package/docs/SECURITY-AUDIT-REPORT.md +306 -0
  18. package/docs/SST-INTEGRATION.md +712 -0
  19. package/docs/STEADYWATCH-IMPLEMENTATION.md +303 -0
  20. package/docs/TERNARY-AUDIT-REPORT.md +247 -0
  21. package/docs/TME-FAQ.md +221 -0
  22. package/docs/WHITEPAPER.md +623 -0
  23. package/docs/adapters.html +1001 -0
  24. package/docs/advanced-systems.html +1045 -0
  25. package/docs/annex.html +1046 -0
  26. package/docs/api.html +970 -0
  27. package/docs/business/response-templates.md +160 -0
  28. package/docs/c2c.html +1225 -0
  29. package/docs/cli.html +1332 -0
  30. package/docs/configuration.html +1248 -0
  31. package/docs/darshan.html +1085 -0
  32. package/docs/dharma.html +966 -0
  33. package/docs/docs-bundle.html +1075 -0
  34. package/docs/docs.css +3120 -0
  35. package/docs/docs.js +556 -0
  36. package/docs/doko.html +969 -0
  37. package/docs/geo-proof.html +858 -0
  38. package/docs/getting-started.html +840 -0
  39. package/docs/gumba-tutorial.html +1144 -0
  40. package/docs/gumba.html +1098 -0
  41. package/docs/index.html +914 -0
  42. package/docs/jhilke.html +1312 -0
  43. package/docs/karma.html +1100 -0
  44. package/docs/katha.html +1037 -0
  45. package/docs/lama.html +978 -0
  46. package/docs/mandala.html +1067 -0
  47. package/docs/mani.html +964 -0
  48. package/docs/mantra.html +967 -0
  49. package/docs/mesh.html +1409 -0
  50. package/docs/nakpak.html +869 -0
  51. package/docs/namche.html +928 -0
  52. package/docs/nav-order.json +53 -0
  53. package/docs/prahari.html +1043 -0
  54. package/docs/prism-bash.min.js +1 -0
  55. package/docs/prism-javascript.min.js +1 -0
  56. package/docs/prism-json.min.js +1 -0
  57. package/docs/prism-tomorrow.min.css +1 -0
  58. package/docs/prism.min.js +1 -0
  59. package/docs/privacy.html +699 -0
  60. package/docs/quick-reference.html +1181 -0
  61. package/docs/sakshi.html +1402 -0
  62. package/docs/sandboxing.md +386 -0
  63. package/docs/seva.html +911 -0
  64. package/docs/sherpa.html +871 -0
  65. package/docs/studio.html +860 -0
  66. package/docs/stupa.html +995 -0
  67. package/docs/tailwind.min.css +2 -0
  68. package/docs/tattva.html +1332 -0
  69. package/docs/terms.html +686 -0
  70. package/docs/time-server-deployment.md +166 -0
  71. package/docs/time-sources.html +1392 -0
  72. package/docs/tivra.html +1127 -0
  73. package/docs/trademark-policy.html +686 -0
  74. package/docs/tribhuj.html +1183 -0
  75. package/docs/trust-security.html +1029 -0
  76. package/docs/tutorials/backup-recovery.html +654 -0
  77. package/docs/tutorials/dashboard.html +604 -0
  78. package/docs/tutorials/domain-setup.html +605 -0
  79. package/docs/tutorials/host-website.html +456 -0
  80. package/docs/tutorials/mesh-network.html +505 -0
  81. package/docs/tutorials/mobile-access.html +445 -0
  82. package/docs/tutorials/privacy.html +467 -0
  83. package/docs/tutorials/raspberry-pi.html +600 -0
  84. package/docs/tutorials/security-basics.html +539 -0
  85. package/docs/tutorials/share-files.html +431 -0
  86. package/docs/tutorials/troubleshooting.html +637 -0
  87. package/docs/tutorials/trust-karma.html +419 -0
  88. package/docs/tutorials/yak-protocol.html +456 -0
  89. package/docs/tutorials.html +1034 -0
  90. package/docs/vani.html +1270 -0
  91. package/docs/webserver.html +809 -0
  92. package/docs/yak-protocol.html +940 -0
  93. package/docs/yak-timeserver-design.md +475 -0
  94. package/docs/yakapp.html +1015 -0
  95. package/docs/ypc27.html +1069 -0
  96. package/docs/yurt.html +1344 -0
  97. package/embedded-docs/bundle.js +274 -114
  98. package/gossip/protocol.js +247 -27
  99. package/identity/key-resolver.js +262 -0
  100. package/identity/machine-seed.js +632 -0
  101. package/identity/node-key.js +669 -368
  102. package/identity/tribhuj-ratchet.js +506 -0
  103. package/knowledge-base.js +37 -8
  104. package/launcher/yakmesh.bat +62 -0
  105. package/launcher/yakmesh.sh +70 -0
  106. package/mesh/annex.js +462 -108
  107. package/mesh/beacon-broadcast.js +4 -1
  108. package/mesh/darshan.js +17 -5
  109. package/mesh/gumba.js +47 -13
  110. package/mesh/jhilke.js +651 -0
  111. package/mesh/katha.js +5 -2
  112. package/mesh/nakpak-routing.js +8 -5
  113. package/mesh/network.js +724 -34
  114. package/mesh/pulse-sync.js +4 -1
  115. package/mesh/seva.js +526 -0
  116. package/mesh/sherpa-discovery.js +89 -8
  117. package/mesh/sybil-defense.js +19 -5
  118. package/mesh/temporal-encoder.js +4 -3
  119. package/mesh/yurt.js +72 -17
  120. package/models/entropy-sentinel.onnx +0 -0
  121. package/models/karma-trust.onnx +0 -0
  122. package/models/manifest.json +43 -0
  123. package/models/sakshi-anomaly.onnx +0 -0
  124. package/oracle/code-proof-protocol.js +7 -6
  125. package/oracle/codebase-lock.js +257 -28
  126. package/oracle/index.js +74 -15
  127. package/oracle/ma902-snmp.js +678 -0
  128. package/oracle/module-sealer.js +5 -3
  129. package/oracle/packet-checksum.js +201 -0
  130. package/oracle/ternary-144t.js +714 -0
  131. package/oracle/ternary-ml.js +481 -0
  132. package/oracle/time-api.js +239 -0
  133. package/oracle/time-source.js +137 -47
  134. package/oracle/validation-oracle-hardened.js +1111 -1071
  135. package/oracle/validation-oracle.js +4 -2
  136. package/oracle/ypc27.js +211 -0
  137. package/package.json +20 -3
  138. package/protocol/yak-handler.js +35 -9
  139. package/protocol/yak-protocol.js +6 -5
  140. package/reference/cpp/yakmesh_mceliece_shard.cpp +168 -0
  141. package/reference/cpp/yakmesh_ypc27.cpp +179 -0
  142. package/sbom.json +87 -0
  143. package/scripts/security-audit.mjs +264 -0
  144. package/scripts/update-docs-sidebar.cjs +164 -0
  145. package/security/crypto-config.js +4 -3
  146. package/security/dharma-moderation.js +4 -3
  147. package/security/doko-identity.js +193 -143
  148. package/security/domain-consensus.js +86 -85
  149. package/security/fs-hardening.js +620 -0
  150. package/security/hardware-attestation.js +5 -3
  151. package/security/hybrid-trust.js +227 -87
  152. package/security/karma-rate-limiter.js +692 -0
  153. package/security/khata-protocol.js +22 -21
  154. package/security/khata-trust-integration.js +277 -150
  155. package/security/memory-safety.js +635 -0
  156. package/security/mesh-auth.js +11 -10
  157. package/security/mesh-revocation.js +18 -5
  158. package/security/namche-gateway.js +298 -69
  159. package/security/sakshi.js +102 -3
  160. package/security/sangha.js +770 -0
  161. package/security/secure-config.js +473 -0
  162. package/security/silicon-parity.js +13 -10
  163. package/security/steadywatch.js +1142 -0
  164. package/security/strike-system.js +32 -3
  165. package/security/temporal-signing.js +488 -0
  166. package/security/trit-commitment.js +464 -0
  167. package/server/crypto/annex.js +247 -0
  168. package/server/darshan-api.js +343 -0
  169. package/server/index.js +3259 -362
  170. package/server/komm-api.js +668 -0
  171. package/utils/accel.js +2273 -0
  172. package/utils/ternary-id.js +79 -0
  173. package/utils/verify-worker.js +57 -0
  174. package/webserver/index.js +95 -5
  175. package/assets/yakmesh-logo.png +0 -0
  176. package/assets/yakmesh-logo.svg +0 -80
  177. package/assets/yakmesh-logo2.png +0 -0
  178. package/assets/yakmesh-logo2sm.png +0 -0
  179. package/assets/ymsm.png +0 -0
  180. package/scripts/update-docs-nav.cjs +0 -194
  181. package/update-docs-nav.cjs +0 -18
  182. package/update-nav.ps1 +0 -16
  183. package/website/assets/silhouettes/adapters.svg +0 -107
  184. package/website/assets/silhouettes/api-endpoints.svg +0 -115
  185. package/website/assets/silhouettes/atomic-clock.svg +0 -83
  186. package/website/assets/silhouettes/base-camp.svg +0 -81
  187. package/website/assets/silhouettes/bridge.svg +0 -69
  188. package/website/assets/silhouettes/docs-bundle.svg +0 -113
  189. package/website/assets/silhouettes/doko-basket.svg +0 -70
  190. package/website/assets/silhouettes/fortress.svg +0 -93
  191. package/website/assets/silhouettes/gateway.svg +0 -54
  192. package/website/assets/silhouettes/gears.svg +0 -93
  193. package/website/assets/silhouettes/globe-satellite.svg +0 -67
  194. package/website/assets/silhouettes/karma-wheel.svg +0 -137
  195. package/website/assets/silhouettes/lama-council.svg +0 -141
  196. package/website/assets/silhouettes/mandala-network.svg +0 -169
  197. package/website/assets/silhouettes/mani-stones.svg +0 -149
  198. package/website/assets/silhouettes/mantra-wheel.svg +0 -116
  199. package/website/assets/silhouettes/mesh-nodes.svg +0 -113
  200. package/website/assets/silhouettes/nakpak.svg +0 -56
  201. package/website/assets/silhouettes/peak-lightning.svg +0 -73
  202. package/website/assets/silhouettes/sherpa.svg +0 -69
  203. package/website/assets/silhouettes/stupa-tower.svg +0 -119
  204. package/website/assets/silhouettes/tattva-eye.svg +0 -78
  205. package/website/assets/silhouettes/terminal.svg +0 -74
  206. package/website/assets/silhouettes/webserver.svg +0 -145
  207. package/website/assets/silhouettes/yak.svg +0 -78
  208. package/website/assets/yakmesh-logo.png +0 -0
  209. package/website/assets/yakmesh-logo.webp +0 -0
  210. package/website/assets/yakmesh-logo128x140.webp +0 -0
  211. package/website/assets/yakmesh-logo2.png +0 -0
  212. package/website/assets/yakmesh-logo2.svg +0 -51
  213. package/website/assets/yakmesh-logo40x44.webp +0 -0
  214. package/website/assets/yakmesh.gif +0 -0
  215. package/website/assets/yakmesh.ico +0 -0
  216. package/website/assets/yakmesh.jpg +0 -0
  217. package/website/assets/yakmesh.pdf +0 -0
  218. package/website/assets/yakmesh.png +0 -0
  219. package/website/assets/yakmesh.svg +0 -70
  220. package/website/assets/yakmesh128.webp +0 -0
  221. package/website/assets/yakmesh32.png +0 -0
  222. package/website/assets/yakmesh32.svg +0 -65
  223. package/website/assets/yakmesh32o.ico +0 -2
  224. package/website/assets/yakmesh32o.svg +0 -65
  225. 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™: Sturdy & Secure</h1>
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 high-resiliency, decentralized networking layer designed for the 2026 threat landscape. Built with quantum-resistant cryptography at its core and anchored by PCIe atomic timing synchronization, YAKMESH provides a "sturdy" substrate for distributed systems that cannot afford to fail.
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
- - 🔒 **Post-Quantum Secure** - ML-DSA-65 (NIST FIPS 204) signatures
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
- > See [yakmesh.dev](https://yakmesh.dev) for complete feature documentation
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
- ├── security/ # NAMCHE gateway, DOKO identity, trust models
57
- ├── oracle/ # TATTVA self-verifying validation engine
58
- ├── mesh/ # SHERPA, NAKPAK, ANNEX networking
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
- ├── adapters/ # Platform integration plugins
62
- ├── embedded-docs/ # GRANTH documentation bundle
63
- └── server/ # HTTP/WS server
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
- | `/health` | Node health status |
84
- | `/node` | Node identity info |
85
- | `/peers` | Connected peers |
86
- | `/oracle/status` | Oracle integrity check |
87
- | `/network/identity` | Network identity |
88
- | `/time/status` | Time source detection |
89
- | `/security/namche/gates` | Gateway verification status |
90
- | `/geo/status` | Geographic proof status |
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/proof - Fetch consensus proof
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 with optional proof
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 (immutable content = cache forever)
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
- // Include proof in headers if requested
77
- if (includeProof && result.proof) {
78
- res.setHeader('X-Consensus-Proof', JSON.stringify(result.proof));
79
- res.setHeader('X-Verified', result.verified ? 'true' : 'false');
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/proof
108
- * Fetch consensus proof for light client verification
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/proof', readLimiter, (req, res) => {
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
- proof: meta.consensusProof.toJSON ? meta.consensusProof.toJSON() : meta.consensusProof,
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 public delivery
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';