yakmesh 2.0.0 → 2.5.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 +484 -0
- package/README.md +99 -3
- package/RELEASE_CHECKLIST.md +115 -0
- package/SECURITY.md +40 -5
- package/adapters/adapter-byond/README.md +329 -0
- package/adapters/adapter-byond/dmapi/README.md +178 -0
- package/adapters/adapter-byond/dmapi/yakmesh.dm +442 -0
- package/adapters/adapter-byond/dmapi/yakmesh_config.dm +42 -0
- package/adapters/adapter-byond/examples/pondera-hosting.js +276 -0
- package/adapters/adapter-byond/http-bridge.js +463 -0
- package/adapters/adapter-byond/index.js +700 -0
- package/adapters/adapter-byond/package.json +43 -0
- package/adapters/adapter-byond/security.js +454 -0
- package/adapters/adapter-byond/topic-client.js +303 -0
- package/adapters/adapter-website/index.js +955 -0
- package/cli/index.js +535 -1
- package/content/store.js +9 -7
- package/dashboard/index.html +530 -1
- package/database/replication.js +9 -6
- package/gossip/protocol.js +11 -8
- package/identity/node-key.js +23 -17
- package/mesh/annex.js +16 -13
- package/mesh/nakpak-routing.js +6 -4
- package/mesh/network.js +12 -9
- package/mesh/sherpa-discovery.js +277 -3
- package/oracle/code-proof-protocol.js +20 -8
- package/oracle/codebase-lock.js +6 -3
- package/oracle/consensus-engine.js +5 -2
- package/oracle/genesis-network-v2.js +37 -36
- package/oracle/genesis-network.js +28 -30
- package/oracle/index.js +24 -1
- package/oracle/module-sealer.js +5 -3
- package/oracle/network-identity.js +45 -7
- package/oracle/time-source.js +31 -23
- package/oracle/validation-oracle-hardened.js +43 -8
- package/oracle/validation-oracle.js +26 -7
- package/package.json +29 -4
- package/protocol/yak-handler.cjs +96 -0
- package/protocol/yak-handler.js +104 -0
- package/protocol/yak-protocol.js +1273 -0
- package/protocol/yak-protocol.reg +15 -0
- package/security/crypto-config.js +413 -0
- package/security/doko-identity.js +1476 -0
- package/security/domain-consensus.js +1237 -0
- package/security/geo-proof.js +757 -0
- package/security/hardware-attestation.js +764 -0
- package/security/hybrid-trust.js +835 -0
- package/security/khata-protocol.js +526 -0
- package/security/khata-trust-integration.js +929 -0
- package/security/mesh-auth.js +126 -0
- package/security/mesh-revocation.js +602 -0
- package/security/namche-gateway.js +727 -0
- package/security/silicon-parity.js +782 -0
- package/security/strike-system.js +735 -0
- package/security/sybil-graph.js +805 -0
- package/security/tls-binding.js +647 -0
- package/security/trust-tier.js +451 -0
- package/server/index.js +584 -52
- package/types/index.d.ts +346 -0
- package/utils/logger.js +209 -0
- package/webserver/cli.js +5 -3
- package/webserver/full-stack-example.js +11 -16
- package/webserver/index.js +18 -15
- package/yakmesh-2.5.0.tgz +0 -0
- package/adapters/adapter-peerquanta/index.js +0 -1176
- package/adapters/adapter-peerquanta/package.json +0 -18
- package/announcements/discord-v1.3.1.md +0 -55
- package/announcements/discord-v1.4.0.md +0 -86
- package/announcements/discord-v1.5.0.md +0 -29
- package/announcements/discord-v1.6.0.md +0 -49
- package/announcements/discord-v1.7.0.md +0 -35
- package/announcements/discord-v1.8.0.md +0 -66
- package/announcements/patreon-welcome.md +0 -83
- package/announcements/telegram-v1.4.0.md +0 -43
- package/announcements/telegram-v1.5.0.md +0 -9
- package/announcements/telegram-v1.6.0.md +0 -15
- package/announcements/telegram-v1.7.0.md +0 -11
- package/announcements/telegram-v1.8.0.md +0 -41
- package/announcements/x-v1.4.0.md +0 -58
- package/announcements/x-v1.5.0.md +0 -11
- package/announcements/x-v1.6.0.md +0 -13
- package/announcements/x-v1.7.0.md +0 -41
- package/announcements/x-v1.8.0.md +0 -65
- package/deploy/CADDY-README.md +0 -201
- package/deploy/Caddyfile +0 -208
- package/deploy-packages/README.md +0 -114
- package/deploy-packages/build-packages.ps1 +0 -205
- package/deploy-packages/yakmesh-full/README.md +0 -122
- package/deploy-packages/yakmesh-full/config/Caddyfile +0 -61
- package/deploy-packages/yakmesh-full/config/php.ini +0 -55
- package/deploy-packages/yakmesh-full/config/yakmesh.config.js +0 -100
- package/deploy-packages/yakmesh-full/start.ps1 +0 -193
- package/deploy-packages/yakmesh-full/start.sh +0 -207
- package/deploy-packages/yakmesh-full/stop.ps1 +0 -35
- package/deploy-packages/yakmesh-full/stop.sh +0 -30
- package/deploy-packages/yakmesh-minimal/README.md +0 -69
- package/deploy-packages/yakmesh-minimal/config/Caddyfile +0 -46
- package/deploy-packages/yakmesh-minimal/config/yakmesh.config.js +0 -79
- package/deploy-packages/yakmesh-minimal/start.ps1 +0 -165
- package/deploy-packages/yakmesh-minimal/start.sh +0 -161
- package/deploy-packages/yakmesh-minimal/stop.ps1 +0 -29
- package/deploy-packages/yakmesh-minimal/stop.sh +0 -29
- package/discord.md +0 -29
- package/ecosystem.config.json +0 -16
- package/hostinger/node.php +0 -65
- package/marketing/devto-article.md +0 -79
- package/marketing/hacker-news.md +0 -27
- package/marketing/linkedin.md +0 -42
- package/marketing/product-hunt.md +0 -60
- package/marketing/reddit-posts.md +0 -118
- package/marketing/twitter-thread.md +0 -83
- package/marketing/v1.4.0-discord-header.md +0 -45
- package/marketing/v1.4.0-telegram.md +0 -56
- package/marketing/v1.4.0-twitter-x.md +0 -92
- package/yakbot/.env.example +0 -22
- package/yakbot/README.md +0 -166
- package/yakbot/index.js +0 -760
- package/yakbot/package-lock.json +0 -433
- package/yakbot/package.json +0 -23
- package/yakbot/register-commands.js +0 -105
- package/yakmesh.config.js +0 -8
- package/yakmesh.config.production.js +0 -37
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,490 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to YAKMESH will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [2.5.0] - 2026-01-20
|
|
6
|
+
|
|
7
|
+
### 🌍 Geographic Exclusion — Physics Don't Lie
|
|
8
|
+
|
|
9
|
+
*Theme: "Speed of light is the ultimate validator. We prove where you CANNOT be."*
|
|
10
|
+
|
|
11
|
+
#### 🎯 Core Principles
|
|
12
|
+
|
|
13
|
+
- **Unforgeable Distance** - Speed of light provides cryptographic lower bound on distance
|
|
14
|
+
- **Exclusion Zones** - Prove where nodes CANNOT be, not precise location
|
|
15
|
+
- **No GPS Required** - RTT + physics = provable geography
|
|
16
|
+
- **Network Overhead is Safe** - Latency only inflates RTT, making zones always valid
|
|
17
|
+
|
|
18
|
+
#### ✅ Implemented Features
|
|
19
|
+
|
|
20
|
+
**Geographic Proof Core** (`security/geo-proof.js`)
|
|
21
|
+
- Speed-of-light distance calculation (fiber = 0.67c)
|
|
22
|
+
- LandmarkRegistry for known geographic reference points
|
|
23
|
+
- RTTMeasurement with jitter handling and averaging
|
|
24
|
+
- ExclusionZone creation from RTT measurements
|
|
25
|
+
- GeographicProof with confidence scoring
|
|
26
|
+
- GeoProofService for full lifecycle management
|
|
27
|
+
- **59 tests**
|
|
28
|
+
|
|
29
|
+
**KHATA Gossip Integration** (`security/khata-trust-integration.js`)
|
|
30
|
+
- 6 new message types for geo-proof gossip:
|
|
31
|
+
- GEO_PROOF_ANNOUNCE, GEO_PROOF_REQUEST, GEO_PROOF_RESPONSE
|
|
32
|
+
- LANDMARK_ANNOUNCE, LANDMARK_REQUEST, LANDMARK_VERIFY
|
|
33
|
+
- Geo-proof announcement and request handling
|
|
34
|
+
- Landmark discovery via gossip
|
|
35
|
+
- **14 new tests** (36 total)
|
|
36
|
+
|
|
37
|
+
**CLI Commands** (`cli/index.js`)
|
|
38
|
+
- `yakmesh geo status` - Show geographic proof status
|
|
39
|
+
- `yakmesh geo landmarks` - List known landmarks
|
|
40
|
+
- `yakmesh geo zones` - List exclusion zones
|
|
41
|
+
- `yakmesh geo prove` - Generate geographic proof
|
|
42
|
+
- `yakmesh geo verify <nodeId>` - Verify another node
|
|
43
|
+
- `yakmesh geo add-landmark <name>` - Add landmark manually
|
|
44
|
+
- `yakmesh geo physics` - Show speed-of-light constants
|
|
45
|
+
|
|
46
|
+
**Server API Endpoints** (`server/index.js`)
|
|
47
|
+
- `GET /geo/status` - Geographic proof status and physics constants
|
|
48
|
+
- `GET /geo/landmarks` - List registered landmarks
|
|
49
|
+
- `POST /geo/landmarks` - Add a landmark
|
|
50
|
+
- `GET /geo/zones` - List exclusion zones
|
|
51
|
+
- `POST /geo/prove` - Generate geographic proof
|
|
52
|
+
- `POST /geo/verify` - Verify another node's claims
|
|
53
|
+
|
|
54
|
+
**SHERPA Beacon Integration** (`mesh/sherpa-discovery.js`)
|
|
55
|
+
- RTT measurement during beacon fetch (performance.now())
|
|
56
|
+
- Geographic coordinates in BeaconMessage (lat, lon, name, accuracyKm, timeTier)
|
|
57
|
+
- Automatic landmark discovery from geo-enabled beacons
|
|
58
|
+
- RTT sample averaging with configurable window
|
|
59
|
+
- Protocol version bumped to 1.1 for geo support
|
|
60
|
+
- New SherpaDiscovery methods:
|
|
61
|
+
- `setGeoCoordinates()` - Configure this node as landmark
|
|
62
|
+
- `setGeoProofService()` - Connect to GeoProofService
|
|
63
|
+
- `getGeoLandmarks()` - List discovered landmarks
|
|
64
|
+
- `getRttMeasurements()` - Get RTT data for proof generation
|
|
65
|
+
- **31 tests**
|
|
66
|
+
|
|
67
|
+
#### ⚡ Speed-of-Light Physics
|
|
68
|
+
|
|
69
|
+
| RTT | Minimum Distance |
|
|
70
|
+
|-----|------------------|
|
|
71
|
+
| 1 ms | ≥100 km |
|
|
72
|
+
| 5 ms | ≥500 km |
|
|
73
|
+
| 10 ms | ≥999 km |
|
|
74
|
+
| 50 ms | ≥4,997 km |
|
|
75
|
+
| 100 ms | ≥9,993 km |
|
|
76
|
+
| 200 ms | ≥19,986 km |
|
|
77
|
+
|
|
78
|
+
**Formula:** `minDistance = (RTT / 2) × fiberSpeed`
|
|
79
|
+
- Vacuum speed: 299,792.458 km/s
|
|
80
|
+
- Fiber speed (0.67c): 199,861.639 km/s
|
|
81
|
+
|
|
82
|
+
#### 📊 Test Summary
|
|
83
|
+
|
|
84
|
+
| Module | Tests | Status |
|
|
85
|
+
|--------|-------|--------|
|
|
86
|
+
| Geo Proof Core | 59 | ✅ |
|
|
87
|
+
| KHATA Geo Integration | 14 | ✅ |
|
|
88
|
+
| SHERPA Geo Integration | 31 | ✅ |
|
|
89
|
+
| **v2.5 Total** | **104** | ✅ |
|
|
90
|
+
|
|
91
|
+
#### 🔮 Implementation Notes
|
|
92
|
+
|
|
93
|
+
- Dashboard visualization skipped (privacy concern - CLI provides same data)
|
|
94
|
+
- SHERPA beacons now serve as geographic landmarks automatically
|
|
95
|
+
- RTT measured using high-resolution `performance.now()` timing
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## [2.4.0] - 2026-01-19 (Internal)
|
|
100
|
+
|
|
101
|
+
### 🤝 Mathematical Trust — No Simulation
|
|
102
|
+
|
|
103
|
+
*Theme: "You can't fake physics. Atomic time and real silicon are your credentials."*
|
|
104
|
+
|
|
105
|
+
> **Note**: This version was developed internally and released as part of v2.5.0.
|
|
106
|
+
|
|
107
|
+
#### 🎯 Core Principles
|
|
108
|
+
|
|
109
|
+
- **No Simulation** - Must prove real AES-NI hardware through timing analysis
|
|
110
|
+
- **Atomic Precision** - Highest trust requires physical time sources
|
|
111
|
+
- **Mathematical Consensus** - Revocation through signature counting, not voting
|
|
112
|
+
|
|
113
|
+
#### ✅ Implemented Features
|
|
114
|
+
|
|
115
|
+
**Mesh-Consensus Revocation** (`security/mesh-revocation.js`)
|
|
116
|
+
- 2/3 threshold attestation-based revocation
|
|
117
|
+
- Post-quantum signed attestations (ML-DSA-65)
|
|
118
|
+
- Revocation certificates with threshold proof
|
|
119
|
+
- **41 tests**
|
|
120
|
+
|
|
121
|
+
**Hardware Attestation** (`security/hardware-attestation.js`)
|
|
122
|
+
- AES-NI timing verification to prove real silicon
|
|
123
|
+
- Challenge-response protocol for peer verification
|
|
124
|
+
- Bot farms and VMs fail timing checks
|
|
125
|
+
- **5 tests**
|
|
126
|
+
|
|
127
|
+
**Trust Tier System** (`security/trust-tier.js`)
|
|
128
|
+
- ORACLE (2.0x): Atomic clock + AES-NI + 30 days
|
|
129
|
+
- ANCHOR (1.5x): GPS+PPS + AES-NI + 14 days
|
|
130
|
+
- SENTINEL (1.25x): PTP + AES-NI + 7 days
|
|
131
|
+
- PARTICIPANT (1.0x): NTP + AES-NI
|
|
132
|
+
- OBSERVER (0.25x): Unverified
|
|
133
|
+
- **35 tests**
|
|
134
|
+
|
|
135
|
+
**Silicon Parity** (`security/silicon-parity.js`)
|
|
136
|
+
- "One Silicon = One Vote" anti-ASIC/farm defense
|
|
137
|
+
- Weight division: `tierMax / coreCount`
|
|
138
|
+
- 100-core rig = same weight as 1-core
|
|
139
|
+
- AES-NI fingerprint as unique silicon identity
|
|
140
|
+
- **36 tests**
|
|
141
|
+
|
|
142
|
+
**Sybil Graph Analysis** (`security/sybil-graph.js`)
|
|
143
|
+
- Clustering coefficient detection (>0.7 = suspicious)
|
|
144
|
+
- Edge cut ratio analysis (<0.1 = insular cluster)
|
|
145
|
+
- Component analysis for cluster isolation
|
|
146
|
+
- Behavior correlation (uptime, activity patterns)
|
|
147
|
+
- **44 tests**
|
|
148
|
+
|
|
149
|
+
**KHATA Trust Integration** (`security/khata-trust-integration.js`)
|
|
150
|
+
- Gossip layer for trust messages over KHATA protocol
|
|
151
|
+
- 8 new message types for attestation/challenge routing
|
|
152
|
+
- Deduplication and hop limit enforcement
|
|
153
|
+
- Trust synchronization between peers
|
|
154
|
+
- **22 tests**
|
|
155
|
+
|
|
156
|
+
**Strike System** (`security/strike-system.js`)
|
|
157
|
+
- "Three Strikes — Then Math Speaks"
|
|
158
|
+
- Hardware fingerprint tracks identity across fresh starts
|
|
159
|
+
- Strike 1: Fresh start allowed, recorded
|
|
160
|
+
- Strike 2: 7-day probation, reduced trust (0.5x)
|
|
161
|
+
- Strike 3: Permanent network ban
|
|
162
|
+
- Revocation bridge for automated strike issuance
|
|
163
|
+
- **31 tests**
|
|
164
|
+
|
|
165
|
+
#### 📊 Test Summary
|
|
166
|
+
|
|
167
|
+
| Module | Tests | Status |
|
|
168
|
+
|--------|-------|--------|
|
|
169
|
+
| Mesh Revocation | 41 | ✅ |
|
|
170
|
+
| Hardware Attestation | 5 | ✅ |
|
|
171
|
+
| Trust Tiers | 35 | ✅ |
|
|
172
|
+
| Silicon Parity | 36 | ✅ |
|
|
173
|
+
| Sybil Graph | 44 | ✅ |
|
|
174
|
+
| KHATA Integration | 22 | ✅ |
|
|
175
|
+
| Strike System | 31 | ✅ |
|
|
176
|
+
| **v2.4 Total** | **214** | ✅ |
|
|
177
|
+
|
|
178
|
+
**Project Total**: 598 + 214 = **812 tests**
|
|
179
|
+
|
|
180
|
+
See [ROADMAP-2.4.0.md](docs/ROADMAP-2.4.0.md) for full details.
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## [2.3.0] - 2026-01-20
|
|
185
|
+
|
|
186
|
+
### 🧪 Testing Expansion, BYOND Adapter & Bug Fixes
|
|
187
|
+
|
|
188
|
+
This release expands test coverage from 352 to 598 tests with comprehensive mesh module testing and adds the BYOND game server adapter.
|
|
189
|
+
|
|
190
|
+
#### 📊 Test Coverage
|
|
191
|
+
|
|
192
|
+
| Module | Tests | Status |
|
|
193
|
+
|--------|-------|--------|
|
|
194
|
+
| **Oracle** | 98 | ✅ All passing |
|
|
195
|
+
| **Protocol** | 56 | ✅ All passing |
|
|
196
|
+
| **Multi-Node** | 18 | ✅ All passing |
|
|
197
|
+
| **BYOND Adapter** | 36 | ✅ All passing |
|
|
198
|
+
| **Security (Vitest)** | 390 | ✅ All passing (55 skipped) |
|
|
199
|
+
| **Total** | **598** | **543 passing, 55 skipped** |
|
|
200
|
+
|
|
201
|
+
#### 🎮 BYOND Game Server Adapter
|
|
202
|
+
|
|
203
|
+
New adapter for integrating BYOND games (Space Station 13, Pondera, etc.) with Yakmesh:
|
|
204
|
+
|
|
205
|
+
- **Topic Protocol** - Native BYOND wire protocol implementation
|
|
206
|
+
- **HTTP Bridge** - REST API for DreamDaemon communication
|
|
207
|
+
- **Server Discovery** - Find BYOND servers via mesh gossip
|
|
208
|
+
- **World Persistence** - Save/load world data to mesh storage
|
|
209
|
+
- **DOKO Integration** - Cryptographic identity for game servers
|
|
210
|
+
- **DMAPI Library** - Drop-in DM code for game developers
|
|
211
|
+
|
|
212
|
+
**Files:**
|
|
213
|
+
- `adapters/adapter-byond/index.js` - Main adapter
|
|
214
|
+
- `adapters/adapter-byond/topic-client.js` - Wire protocol
|
|
215
|
+
- `adapters/adapter-byond/http-bridge.js` - HTTP server
|
|
216
|
+
- `adapters/adapter-byond/security.js` - DOKO verification
|
|
217
|
+
- `adapters/adapter-byond/dmapi/` - DM library
|
|
218
|
+
|
|
219
|
+
#### ✅ New Test Files
|
|
220
|
+
|
|
221
|
+
- `mesh/tests/nakpak-routing.test.js` - 52 tests for NAKPAK onion routing
|
|
222
|
+
- `mesh/tests/sherpa-discovery.test.js` - 57 tests for SHERPA peer discovery
|
|
223
|
+
- `mesh/tests/annex.test.js` - 64 tests for ANNEX encrypted channels
|
|
224
|
+
- `security/tests/khata-protocol.test.js` - 38 tests for KHATA trust protocol
|
|
225
|
+
- `security/tests/mesh-auth.test.js` - 54 tests for WebSocket authentication
|
|
226
|
+
- `adapters/adapter-byond/tests/*.test.js` - 36 tests for BYOND integration
|
|
227
|
+
|
|
228
|
+
#### 🐛 Bug Fixes
|
|
229
|
+
|
|
230
|
+
- **Fixed ML-KEM768 cipherText capitalization** - `ml_kem768.encapsulate()` returns `{cipherText}` with capital T, not `{ciphertext}`. Fixed in `nakpak-routing.js` and `annex.js`
|
|
231
|
+
- **Fixed mesh-auth.js import** - Changed `@noble/hashes/sha3` to `@noble/hashes/sha3.js` for proper ESM resolution
|
|
232
|
+
- **Fixed oracle path normalization** - Consistent cross-platform path handling
|
|
233
|
+
|
|
234
|
+
#### 🤖 YakBot Updates
|
|
235
|
+
|
|
236
|
+
- Updated to v2.3.0 with current features
|
|
237
|
+
- Enhanced AI context with NAMCHE/DOKO, adapters, 598 tests
|
|
238
|
+
- New FAQ entry for security features
|
|
239
|
+
- Added YakBot deployment package to build system
|
|
240
|
+
|
|
241
|
+
#### 📝 Notes
|
|
242
|
+
|
|
243
|
+
Some tests are skipped pending full key exchange implementation or complex async mocking requirements. These represent edge cases that work correctly in production but need specialized test infrastructure.
|
|
244
|
+
|
|
245
|
+
## [2.2.0] - 2026-01-18
|
|
246
|
+
|
|
247
|
+
### ✨ YAK:// Protocol v2.2.0 - Remote Bookmarks, DOKO Revocation & Comprehensive Testing
|
|
248
|
+
|
|
249
|
+
**This release includes all features from v2.0.1, v2.1.0, and v2.2.0 (combined release).**
|
|
250
|
+
|
|
251
|
+
#### 📋 Complete v2.2.0 Feature Summary
|
|
252
|
+
|
|
253
|
+
| Category | Features Added |
|
|
254
|
+
|----------|----------------|
|
|
255
|
+
| **YAK:// Protocol** | Custom URL scheme, builtin routes, content addressing |
|
|
256
|
+
| **Local Bookmarks** | Pet names, CLI commands, REST API, dashboard UI |
|
|
257
|
+
| **Remote Bookmarks** | Mesh gossip sync, subscribe/publish, priority resolution |
|
|
258
|
+
| **DOKO Revocation** | Self-revocation, emergency certificates, reason codes |
|
|
259
|
+
| **SSL/TLS Binding** | Certificate fingerprints, domain binding, verification |
|
|
260
|
+
| **Domain Transfers** | Request/authorize workflow, completion proofs |
|
|
261
|
+
| **TypeScript** | Full `.d.ts` type definitions |
|
|
262
|
+
| **Testing** | 352 tests (Oracle 98, Protocol 56, Multi-Node 18, Security 180) |
|
|
263
|
+
| **Developer Experience** | Vitest config, npm scripts, expanded README |
|
|
264
|
+
| **Bug Fixes** | ML-DSA-65 argument order, beacon signature verification |
|
|
265
|
+
|
|
266
|
+
This release adds mesh-synchronized bookmark sharing, key compromise recovery, and brings test coverage to 352 tests across all modules.
|
|
267
|
+
|
|
268
|
+
#### 🌐 Remote Bookmarks (Mesh Sync)
|
|
269
|
+
|
|
270
|
+
Share bookmark lists between nodes via gossip protocol. Subscribe to trusted nodes and receive their bookmarks automatically.
|
|
271
|
+
|
|
272
|
+
**New Class: `RemoteBookmarkSync`**
|
|
273
|
+
- **Publish**: Share your bookmarks to the mesh (`yakmesh bookmark share <list-name>`)
|
|
274
|
+
- **Subscribe**: Follow other nodes' bookmark lists (`yakmesh bookmark subscribe <node-id>`)
|
|
275
|
+
- **Sync**: Automatic sync via gossip protocol
|
|
276
|
+
- **Priority**: Local bookmarks always override remote ones
|
|
277
|
+
|
|
278
|
+
**Dashboard UI:**
|
|
279
|
+
- New "Remote Bookmarks" panel with subscription management
|
|
280
|
+
- Subscribe/Unsubscribe buttons
|
|
281
|
+
- Publish your bookmarks to mesh
|
|
282
|
+
- View remote bookmarks from subscribed nodes
|
|
283
|
+
|
|
284
|
+
**REST API:**
|
|
285
|
+
- `GET /bookmarks/remote/status` - Sync status and stats
|
|
286
|
+
- `GET /bookmarks/remote` - List remote bookmarks
|
|
287
|
+
- `POST /bookmarks/remote/subscribe` - Subscribe to a node
|
|
288
|
+
- `POST /bookmarks/remote/unsubscribe` - Unsubscribe from a node
|
|
289
|
+
- `POST /bookmarks/remote/publish` - Publish your bookmarks
|
|
290
|
+
|
|
291
|
+
#### 🔑 DOKO Revocation (Key Compromise Recovery)
|
|
292
|
+
|
|
293
|
+
Emergency revocation system for compromised DOKO identities.
|
|
294
|
+
|
|
295
|
+
**New Class: `DOKORevocation`**
|
|
296
|
+
- **Self-revocation**: Sign revocation with your own key (if available)
|
|
297
|
+
- **Emergency revocation**: Pre-generated "break-glass" certificates
|
|
298
|
+
- **Verification**: Validate revocation certificates with ML-DSA
|
|
299
|
+
- **Broadcast**: Share revocations via gossip to prevent trust in compromised DOKOs
|
|
300
|
+
|
|
301
|
+
**Revocation Reasons:**
|
|
302
|
+
- `KEY_COMPROMISED` - Private key leaked or stolen
|
|
303
|
+
- `DOKO_SUPERSEDED` - Replaced by new DOKO
|
|
304
|
+
- `IDENTITY_RETIRED` - Voluntary retirement
|
|
305
|
+
- `LOST_ACCESS` - Lost access to private key
|
|
306
|
+
- `AFFILIATION_ENDED` - Left organization
|
|
307
|
+
|
|
308
|
+
**Usage:**
|
|
309
|
+
```javascript
|
|
310
|
+
// Generate emergency cert when creating DOKO (store offline!)
|
|
311
|
+
const emergencyCert = DOKORevocation.generateEmergencyCertificate(doko, privateKey);
|
|
312
|
+
|
|
313
|
+
// Self-revoke if key is compromised but still accessible
|
|
314
|
+
const revocation = DOKORevocation.createSelfRevocation(doko, privateKey, 'key_compromised');
|
|
315
|
+
|
|
316
|
+
// Activate emergency revocation if key is lost
|
|
317
|
+
DOKORevocation.activateEmergencyRevocation(emergencyCert);
|
|
318
|
+
|
|
319
|
+
// Check if a DOKO is revoked
|
|
320
|
+
const status = DOKORevocation.isRevoked(dokoId);
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
#### ✅ Comprehensive Test Coverage
|
|
324
|
+
|
|
325
|
+
**352 tests across all modules:**
|
|
326
|
+
|
|
327
|
+
| Suite | Framework | Tests |
|
|
328
|
+
|-------|-----------|-------|
|
|
329
|
+
| Oracle | Node.js test runner | 98 |
|
|
330
|
+
| Protocol | Node.js test runner | 56 |
|
|
331
|
+
| Multi-Node | Node.js test runner | 18 |
|
|
332
|
+
| Security | Vitest | 180 |
|
|
333
|
+
| **Total** | | **352** |
|
|
334
|
+
|
|
335
|
+
**New Test Files:**
|
|
336
|
+
- `protocol/tests/yak-protocol.test.js` - 56 tests for URL parsing, bookmarks, DOKO integration
|
|
337
|
+
- `tests/multi-node.test.js` - 18 tests for cross-node sync with mock network
|
|
338
|
+
|
|
339
|
+
#### 🎨 Dashboard Improvements
|
|
340
|
+
|
|
341
|
+
- **Bookmarks Panel**: Add, list, remove local bookmarks
|
|
342
|
+
- **Remote Bookmarks Panel**: Subscribe, publish, view mesh-synced bookmarks
|
|
343
|
+
- **Version**: Updated to v2.2.0
|
|
344
|
+
|
|
345
|
+
---
|
|
346
|
+
|
|
347
|
+
## [2.1.0] - 2026-01-18
|
|
348
|
+
|
|
349
|
+
### ✨ YAK:// Protocol v2.1.0 - Bookmarks, SSL Binding & Domain Transfers
|
|
350
|
+
|
|
351
|
+
This release completes Phase 2 of the YAK:// protocol implementation with local bookmarks, SSL/TLS certificate binding, and secure domain transfer workflows.
|
|
352
|
+
|
|
353
|
+
#### 🔖 Local Bookmarks (Phase 2)
|
|
354
|
+
|
|
355
|
+
Personal "pet names" for YAK:// addresses. No global registry needed - bookmarks are local to your node.
|
|
356
|
+
|
|
357
|
+
**Features:**
|
|
358
|
+
- **BookmarkManager**: Manages local bookmarks stored in `data/bookmarks.json`
|
|
359
|
+
- **URL Resolution**: Bookmarks are resolved after builtins, before content hashes
|
|
360
|
+
- **CLI Commands**: Full bookmark management via CLI
|
|
361
|
+
- `yakmesh protocol bookmark add <name> <target>` - Add bookmark
|
|
362
|
+
- `yakmesh protocol bookmark list` - List all bookmarks
|
|
363
|
+
- `yakmesh protocol bookmark get <name>` - Get bookmark details
|
|
364
|
+
- `yakmesh protocol bookmark rm <name>` - Remove bookmark
|
|
365
|
+
- **REST API**: `/bookmarks` endpoints for programmatic access
|
|
366
|
+
- `GET /bookmarks` - List all bookmarks
|
|
367
|
+
- `GET /bookmarks/:name` - Get specific bookmark
|
|
368
|
+
- `POST /bookmarks` - Add bookmark
|
|
369
|
+
- `DELETE /bookmarks/:name` - Remove bookmark
|
|
370
|
+
|
|
371
|
+
**Usage:**
|
|
372
|
+
```bash
|
|
373
|
+
# Add a bookmark
|
|
374
|
+
yakmesh protocol bookmark add docs yak://site/docs
|
|
375
|
+
|
|
376
|
+
# Use the bookmark
|
|
377
|
+
yakmesh protocol open yak://docs
|
|
378
|
+
|
|
379
|
+
# Test resolution
|
|
380
|
+
yakmesh protocol test yak://docs
|
|
381
|
+
# → http://localhost:3000/site/docs
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
#### 🔐 SSL/TLS Certificate Binding
|
|
385
|
+
|
|
386
|
+
Bind SSL certificates to DOKO identities for enhanced domain verification.
|
|
387
|
+
|
|
388
|
+
**New Class: `DOKOCertBinding`**
|
|
389
|
+
- `computeFingerprint(cert)` - SHA-256 fingerprint from PEM or DER certificate
|
|
390
|
+
- `createBinding(options)` - Create SSL binding for a domain
|
|
391
|
+
- `addBinding(doko, binding)` - Add binding to DOKO extensions
|
|
392
|
+
- `verifyBinding(binding, cert)` - Verify certificate matches binding
|
|
393
|
+
- `getBindingForDomain(doko, domain)` - Get binding for specific domain
|
|
394
|
+
- `validateBindings(doko)` - Validate all bindings (expiration, etc.)
|
|
395
|
+
|
|
396
|
+
**Cryptographic Chain:**
|
|
397
|
+
```
|
|
398
|
+
Domain → SSL Certificate → DOKO Identity → Mesh Verification
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
**19 tests** covering fingerprint computation, binding management, and verification.
|
|
402
|
+
|
|
403
|
+
#### 🔄 Domain Transfer Workflow
|
|
404
|
+
|
|
405
|
+
Secure ownership transfer of domains and DOKO-bound assets.
|
|
406
|
+
|
|
407
|
+
**New Class: `DOKOTransfer`**
|
|
408
|
+
- `createRequest(options)` - Create transfer request with expiration
|
|
409
|
+
- `authorize(request, signature, nodeId)` - Owner authorizes transfer
|
|
410
|
+
- `reject(request, reason)` - Owner rejects transfer
|
|
411
|
+
- `cancel(request)` - Requester cancels pending transfer
|
|
412
|
+
- `verifyAuthorization(transfer, publicKey)` - Verify owner signature
|
|
413
|
+
- `complete(transfer, toNodeId)` - Complete transfer with proof
|
|
414
|
+
- `createProof(completedTransfer)` - Generate mesh-verifiable proof
|
|
415
|
+
|
|
416
|
+
**Transfer Flow:**
|
|
417
|
+
```
|
|
418
|
+
New Owner → Request → Current Owner → Authorize →
|
|
419
|
+
Mesh Verifies → Complete → Ownership Updated
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
**Transfer States:** `pending`, `authorized`, `completed`, `rejected`, `expired`, `cancelled`
|
|
423
|
+
|
|
424
|
+
**Transfer Types:** `domain`, `website`, `asset`
|
|
425
|
+
|
|
426
|
+
**19 tests** covering request creation, state transitions, completion, and proof validation.
|
|
427
|
+
|
|
428
|
+
#### 📊 Test Results
|
|
429
|
+
|
|
430
|
+
| Test Suite | Tests | Status |
|
|
431
|
+
|------------|-------|--------|
|
|
432
|
+
| Oracle Tests | 98 | ✅ Pass |
|
|
433
|
+
| Security Tests | 152 | ✅ Pass |
|
|
434
|
+
| DOKO Identity | 60 | ✅ Pass |
|
|
435
|
+
| **Total** | **310** | ✅ All Pass |
|
|
436
|
+
|
|
437
|
+
#### 🔧 Other Changes
|
|
438
|
+
|
|
439
|
+
- Updated protocol version to 2.1.0
|
|
440
|
+
- Fixed regex in DOKO ID format test (mixed case shortId)
|
|
441
|
+
- Improved BookmarkManager normalization (simple `/` prefix)
|
|
442
|
+
|
|
443
|
+
---
|
|
444
|
+
|
|
445
|
+
## [2.0.1] - 2026-01-18
|
|
446
|
+
|
|
447
|
+
### 🔧 Security Patch & Export Completeness
|
|
448
|
+
|
|
449
|
+
This patch release fixes critical ML-DSA-65 argument order bugs discovered during post-release audit.
|
|
450
|
+
|
|
451
|
+
#### 🐛 Bug Fixes
|
|
452
|
+
|
|
453
|
+
##### ML-DSA-65 Argument Order (CRITICAL)
|
|
454
|
+
Fixed incorrect argument order in two files where the noble-post-quantum API was used incorrectly:
|
|
455
|
+
|
|
456
|
+
- **`oracle/module-sealer.js`**: Fixed `sign()` and `verify()` argument order
|
|
457
|
+
- `sign(secretKey, message)` → `sign(message, secretKey)` ✅
|
|
458
|
+
- `verify(publicKey, message, signature)` → `verify(signature, message, publicKey)` ✅
|
|
459
|
+
|
|
460
|
+
- **`mesh/nakpak-routing.js`**: Fixed `sign()` and `verify()` argument order
|
|
461
|
+
- Same corrections as above
|
|
462
|
+
|
|
463
|
+
**Impact**: Module attestations and NakPak routing signatures were failing validation.
|
|
464
|
+
|
|
465
|
+
##### JSON Serialization in DOKO Identity
|
|
466
|
+
Fixed `getSignableBytes()` to properly serialize nested objects using recursive key sorting.
|
|
467
|
+
|
|
468
|
+
#### ✨ New Exports
|
|
469
|
+
|
|
470
|
+
Added missing module exports to `package.json`:
|
|
471
|
+
|
|
472
|
+
| Export Path | Module |
|
|
473
|
+
|-------------|--------|
|
|
474
|
+
| `./security/khata-protocol` | KHATA peer endorsement protocol |
|
|
475
|
+
| `./security/mesh-auth` | Mesh authentication |
|
|
476
|
+
| `./identity/node-key` | Node key management |
|
|
477
|
+
| `./mesh/annex` | ANNEX encrypted P2P channels |
|
|
478
|
+
| `./mesh/temporal-encoder` | Temporal encoding utilities |
|
|
479
|
+
|
|
480
|
+
#### 📋 Release Process
|
|
481
|
+
|
|
482
|
+
Added `RELEASE_CHECKLIST.md` with pre-release verification steps including:
|
|
483
|
+
- Cryptographic API argument order verification
|
|
484
|
+
- Export file existence checks
|
|
485
|
+
- Documentation accuracy review
|
|
486
|
+
|
|
487
|
+
---
|
|
488
|
+
|
|
5
489
|
## [2.0.0] - 2026-01-18
|
|
6
490
|
|
|
7
491
|
### 🧭 NAMCHE Gateway & 📜 DOKO Identity — The "Sherpa Security Stack"
|
package/README.md
CHANGED
|
@@ -51,15 +51,30 @@ In an era where traditional ECDSA is increasingly vulnerable and network jitter
|
|
|
51
51
|
- ⏱️ **Precision Timing** - Support for atomic clocks, GPS, PTP, NTP
|
|
52
52
|
- 🔌 **Plugin Architecture** - Adapters for any database or API
|
|
53
53
|
- 🛡️ **Phase Modulation** - Time-based anti-replay protection
|
|
54
|
+
- 🌍 **Geographic Exclusion** - Speed-of-light physics prove where nodes CANNOT be
|
|
54
55
|
|
|
55
|
-
### v2.
|
|
56
|
+
### v2.5 — The Complete Stack
|
|
56
57
|
|
|
58
|
+
**Identity & Trust:**
|
|
57
59
|
- 🧭 **NAMCHE Gateway** - 7-gate mathematical verification (no CA required)
|
|
58
60
|
- 📜 **DOKO Identity** - Self-sovereign identity documents verified by mesh
|
|
61
|
+
- 🏆 **Trust Tiers** - ORACLE/ANCHOR/SENTINEL/PARTICIPANT hierarchy
|
|
62
|
+
- 🔬 **Hardware Attestation** - AES-NI timing proves real silicon
|
|
63
|
+
- ⚖️ **Silicon Parity** - "One silicon = one vote" anti-farm defense
|
|
64
|
+
- ⚠️ **Strike System** - Three strikes with hardware fingerprint tracking
|
|
65
|
+
|
|
66
|
+
**Networking:**
|
|
59
67
|
- 🏔️ **SHERPA Discovery** - Decentralized peer discovery via public web beacons
|
|
60
68
|
- 🎒 **NAKPAK Routing** - Post-quantum onion routing for anonymity
|
|
61
69
|
- 🔐 **ANNEX Channels** - ML-KEM768 encrypted P2P with perfect forward secrecy
|
|
62
|
-
-
|
|
70
|
+
- 🔗 **YAK:// Protocol** - Mesh-native URL scheme with bookmarks
|
|
71
|
+
|
|
72
|
+
**Advanced:**
|
|
73
|
+
- 🌍 **Geographic Proof** - Speed-of-light exclusion zones
|
|
74
|
+
- 🕵️ **Sybil Detection** - Graph analysis for fake identity clusters
|
|
75
|
+
- 📡 **ECHO Ranging** - Privacy-preserving topology discovery
|
|
76
|
+
- 💓 **PULSE Heartbeat** - Liveness detection and partition recovery
|
|
77
|
+
- 🚨 **BEACON Alerts** - Priority emergency broadcast
|
|
63
78
|
|
|
64
79
|
## Quick Start
|
|
65
80
|
|
|
@@ -104,7 +119,8 @@ yakmesh/
|
|
|
104
119
|
│ ├── doko-identity.js # Self-sovereign identity
|
|
105
120
|
│ ├── hybrid-trust.js # Multi-factor trust scoring
|
|
106
121
|
│ ├── tls-binding.js # mTLS certificate binding
|
|
107
|
-
│
|
|
122
|
+
│ ├── domain-consensus.js # Mesh-verified domains
|
|
123
|
+
│ └── geo-proof.js # Speed-of-light geographic exclusion
|
|
108
124
|
├── oracle/ # Self-verifying validation engine
|
|
109
125
|
├── mesh/ # WebSocket P2P networking
|
|
110
126
|
│ ├── sherpa-discovery.js # Decentralized peer discovery
|
|
@@ -159,6 +175,72 @@ class MyAdapter extends BaseAdapter {
|
|
|
159
175
|
|
|
160
176
|
- `@yakmesh/adapter-peerquanta` - PeerQuanta phpBB marketplace
|
|
161
177
|
|
|
178
|
+
## v2.2.0 — YAK:// Protocol & Identity Recovery
|
|
179
|
+
|
|
180
|
+
### 🔗 YAK:// Protocol
|
|
181
|
+
|
|
182
|
+
Custom URL protocol for mesh-native addressing. Escape HTTP entirely!
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
# Built-in routes
|
|
186
|
+
yak://dashboard # Node dashboard
|
|
187
|
+
yak://peers # Connected peers
|
|
188
|
+
yak://content/<hash> # Content by hash
|
|
189
|
+
|
|
190
|
+
# Personal bookmarks (pet names)
|
|
191
|
+
yakmesh bookmark add alice /site/alice-homepage
|
|
192
|
+
yak://alice # Opens your bookmark
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### 📚 Remote Bookmarks
|
|
196
|
+
|
|
197
|
+
Share bookmark lists between nodes via gossip protocol:
|
|
198
|
+
|
|
199
|
+
```javascript
|
|
200
|
+
import { getRemoteBookmarkSync } from 'yakmesh/protocol/yak-protocol';
|
|
201
|
+
|
|
202
|
+
const sync = getRemoteBookmarkSync({ nodeId: 'my-node' });
|
|
203
|
+
|
|
204
|
+
// Subscribe to another node's bookmarks
|
|
205
|
+
sync.subscribe('trusted-node-id');
|
|
206
|
+
|
|
207
|
+
// Publish your bookmarks to the mesh
|
|
208
|
+
sync.publish('my-bookmarks', ['project', 'docs', 'friends']);
|
|
209
|
+
|
|
210
|
+
// Resolve remote bookmarks
|
|
211
|
+
sync.resolveRemote('alice'); // Returns target from subscribed node
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### 🔐 DOKO Revocation
|
|
215
|
+
|
|
216
|
+
Key compromise recovery with self-revocation and emergency "break-glass" certificates:
|
|
217
|
+
|
|
218
|
+
```javascript
|
|
219
|
+
import { DOKORevocation, REVOCATION_REASONS } from 'yakmesh/security/doko-identity';
|
|
220
|
+
|
|
221
|
+
const revocation = new DOKORevocation({ generator, nodeId });
|
|
222
|
+
|
|
223
|
+
// Normal self-revocation
|
|
224
|
+
const cert = revocation.revoke(dokoId, REVOCATION_REASONS.KEY_COMPROMISED, privateKey);
|
|
225
|
+
|
|
226
|
+
// Emergency revocation (primary key compromised, use backup)
|
|
227
|
+
const emergencyCert = revocation.createEmergencyCertificate(
|
|
228
|
+
dokoId,
|
|
229
|
+
REVOCATION_REASONS.KEY_COMPROMISED,
|
|
230
|
+
backupPrivateKey
|
|
231
|
+
);
|
|
232
|
+
|
|
233
|
+
// Check revocation status
|
|
234
|
+
revocation.isRevoked(dokoId); // true
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
**Revocation Reasons:**
|
|
238
|
+
- `KEY_COMPROMISED` - Private key was exposed
|
|
239
|
+
- `DOKO_SUPERSEDED` - Replaced with new identity
|
|
240
|
+
- `IDENTITY_RETIRED` - No longer in use
|
|
241
|
+
- `LOST_ACCESS` - Cannot access keys
|
|
242
|
+
- `AFFILIATION_ENDED` - Organization membership ended
|
|
243
|
+
|
|
162
244
|
## API Endpoints
|
|
163
245
|
|
|
164
246
|
| Endpoint | Method | Description |
|
|
@@ -171,6 +253,20 @@ class MyAdapter extends BaseAdapter {
|
|
|
171
253
|
| `/time/status` | GET | Time source detection |
|
|
172
254
|
| `/time/capabilities` | GET | Time oracle eligibility |
|
|
173
255
|
| `/connect` | POST | Connect to a peer |
|
|
256
|
+
| `/bookmarks` | GET | List local bookmarks |
|
|
257
|
+
| `/bookmarks` | POST | Add a bookmark |
|
|
258
|
+
| `/bookmarks/:name` | DELETE | Remove a bookmark |
|
|
259
|
+
| `/bookmarks/remote` | GET | List remote bookmarks |
|
|
260
|
+
| `/bookmarks/remote/subscribe` | POST | Subscribe to node |
|
|
261
|
+
| `/bookmarks/remote/publish` | POST | Publish bookmark list |
|
|
262
|
+
| `/bookmarks/remote/status` | GET | Remote sync status |
|
|
263
|
+
| `/security/doko/stats` | GET | DOKO identity stats |
|
|
264
|
+
| `/security/namche/gates` | GET | Gateway verification status |
|
|
265
|
+
| `/geo/status` | GET | Geographic proof status |
|
|
266
|
+
| `/geo/landmarks` | GET/POST | List or add landmarks |
|
|
267
|
+
| `/geo/zones` | GET | List exclusion zones |
|
|
268
|
+
| `/geo/prove` | POST | Generate geographic proof |
|
|
269
|
+
| `/geo/verify` | POST | Verify another node's claims |
|
|
174
270
|
|
|
175
271
|
## Pro Features
|
|
176
272
|
|