yakmesh 2.8.2 → 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 (232) hide show
  1. package/CHANGELOG.md +637 -0
  2. package/CONTRIBUTING.md +42 -0
  3. package/Caddyfile +77 -0
  4. package/README.md +119 -29
  5. package/adapters/adapter-mlv-bible/README.md +124 -0
  6. package/adapters/adapter-mlv-bible/index.js +400 -0
  7. package/adapters/chat-mod-adapter.js +532 -0
  8. package/adapters/content-adapter.js +273 -0
  9. package/content/api.js +50 -41
  10. package/content/index.js +2 -2
  11. package/content/store.js +355 -173
  12. package/dashboard/index.html +19 -3
  13. package/database/replication.js +117 -37
  14. package/docs/CRYPTO-AGILITY.md +204 -0
  15. package/docs/MTLS-RESEARCH.md +367 -0
  16. package/docs/NAMCHE-SPEC.md +681 -0
  17. package/docs/PEERQUANTA-YAKMESH-INTEGRATION.md +407 -0
  18. package/docs/PRECISION-DISCLOSURE.md +96 -0
  19. package/docs/README.md +76 -0
  20. package/docs/ROADMAP-2.4.0.md +447 -0
  21. package/docs/ROADMAP-2.5.0.md +244 -0
  22. package/docs/SECURITY-AUDIT-REPORT.md +306 -0
  23. package/docs/SST-INTEGRATION.md +712 -0
  24. package/docs/STEADYWATCH-IMPLEMENTATION.md +303 -0
  25. package/docs/TERNARY-AUDIT-REPORT.md +247 -0
  26. package/docs/TME-FAQ.md +221 -0
  27. package/docs/WHITEPAPER.md +623 -0
  28. package/docs/adapters.html +1001 -0
  29. package/docs/advanced-systems.html +1045 -0
  30. package/docs/annex.html +1046 -0
  31. package/docs/api.html +970 -0
  32. package/docs/business/response-templates.md +160 -0
  33. package/docs/c2c.html +1225 -0
  34. package/docs/cli.html +1332 -0
  35. package/docs/configuration.html +1248 -0
  36. package/docs/darshan.html +1085 -0
  37. package/docs/dharma.html +966 -0
  38. package/docs/docs-bundle.html +1075 -0
  39. package/docs/docs.css +3120 -0
  40. package/docs/docs.js +556 -0
  41. package/docs/doko.html +969 -0
  42. package/docs/geo-proof.html +858 -0
  43. package/docs/getting-started.html +840 -0
  44. package/docs/gumba-tutorial.html +1144 -0
  45. package/docs/gumba.html +1098 -0
  46. package/docs/index.html +914 -0
  47. package/docs/jhilke.html +1312 -0
  48. package/docs/karma.html +1100 -0
  49. package/docs/katha.html +1037 -0
  50. package/docs/lama.html +978 -0
  51. package/docs/mandala.html +1067 -0
  52. package/docs/mani.html +964 -0
  53. package/docs/mantra.html +967 -0
  54. package/docs/mesh.html +1409 -0
  55. package/docs/nakpak.html +869 -0
  56. package/docs/namche.html +928 -0
  57. package/docs/nav-order.json +53 -0
  58. package/docs/prahari.html +1043 -0
  59. package/docs/prism-bash.min.js +1 -0
  60. package/docs/prism-javascript.min.js +1 -0
  61. package/docs/prism-json.min.js +1 -0
  62. package/docs/prism-tomorrow.min.css +1 -0
  63. package/docs/prism.min.js +1 -0
  64. package/docs/privacy.html +699 -0
  65. package/docs/quick-reference.html +1181 -0
  66. package/docs/sakshi.html +1402 -0
  67. package/docs/sandboxing.md +386 -0
  68. package/docs/seva.html +911 -0
  69. package/docs/sherpa.html +871 -0
  70. package/docs/studio.html +860 -0
  71. package/docs/stupa.html +995 -0
  72. package/docs/tailwind.min.css +2 -0
  73. package/docs/tattva.html +1332 -0
  74. package/docs/terms.html +686 -0
  75. package/docs/time-server-deployment.md +166 -0
  76. package/docs/time-sources.html +1392 -0
  77. package/docs/tivra.html +1127 -0
  78. package/docs/trademark-policy.html +686 -0
  79. package/docs/tribhuj.html +1183 -0
  80. package/docs/trust-security.html +1029 -0
  81. package/docs/tutorials/backup-recovery.html +654 -0
  82. package/docs/tutorials/dashboard.html +604 -0
  83. package/docs/tutorials/domain-setup.html +605 -0
  84. package/docs/tutorials/host-website.html +456 -0
  85. package/docs/tutorials/mesh-network.html +505 -0
  86. package/docs/tutorials/mobile-access.html +445 -0
  87. package/docs/tutorials/privacy.html +467 -0
  88. package/docs/tutorials/raspberry-pi.html +600 -0
  89. package/docs/tutorials/security-basics.html +539 -0
  90. package/docs/tutorials/share-files.html +431 -0
  91. package/docs/tutorials/troubleshooting.html +637 -0
  92. package/docs/tutorials/trust-karma.html +419 -0
  93. package/docs/tutorials/yak-protocol.html +456 -0
  94. package/docs/tutorials.html +1034 -0
  95. package/docs/vani.html +1270 -0
  96. package/docs/webserver.html +809 -0
  97. package/docs/yak-protocol.html +940 -0
  98. package/docs/yak-timeserver-design.md +475 -0
  99. package/docs/yakapp.html +1015 -0
  100. package/docs/ypc27.html +1069 -0
  101. package/docs/yurt.html +1344 -0
  102. package/embedded-docs/bundle.js +334 -74
  103. package/gossip/protocol.js +247 -27
  104. package/identity/key-resolver.js +262 -0
  105. package/identity/machine-seed.js +632 -0
  106. package/identity/node-key.js +669 -368
  107. package/identity/tribhuj-ratchet.js +506 -0
  108. package/knowledge-base.js +37 -8
  109. package/launcher/yakmesh.bat +62 -0
  110. package/launcher/yakmesh.sh +70 -0
  111. package/mesh/annex.js +462 -108
  112. package/mesh/beacon-broadcast.js +113 -1
  113. package/mesh/darshan.js +1718 -0
  114. package/mesh/gumba.js +1567 -0
  115. package/mesh/jhilke.js +651 -0
  116. package/mesh/katha.js +1012 -0
  117. package/mesh/nakpak-routing.js +8 -5
  118. package/mesh/network.js +724 -34
  119. package/mesh/pulse-sync.js +4 -1
  120. package/mesh/rate-limiter.js +127 -15
  121. package/mesh/seva.js +526 -0
  122. package/mesh/sherpa-discovery.js +89 -8
  123. package/mesh/sybil-defense.js +19 -5
  124. package/mesh/temporal-encoder.js +4 -3
  125. package/mesh/vani.js +1364 -0
  126. package/mesh/yurt.js +1340 -0
  127. package/models/entropy-sentinel.onnx +0 -0
  128. package/models/karma-trust.onnx +0 -0
  129. package/models/manifest.json +43 -0
  130. package/models/sakshi-anomaly.onnx +0 -0
  131. package/oracle/code-proof-protocol.js +7 -6
  132. package/oracle/codebase-lock.js +257 -28
  133. package/oracle/index.js +74 -15
  134. package/oracle/ma902-snmp.js +678 -0
  135. package/oracle/module-sealer.js +5 -3
  136. package/oracle/network-identity.js +16 -0
  137. package/oracle/packet-checksum.js +201 -0
  138. package/oracle/sst.js +579 -0
  139. package/oracle/ternary-144t.js +714 -0
  140. package/oracle/ternary-ml.js +481 -0
  141. package/oracle/time-api.js +239 -0
  142. package/oracle/time-source.js +137 -47
  143. package/oracle/validation-oracle-hardened.js +1111 -1071
  144. package/oracle/validation-oracle.js +4 -2
  145. package/oracle/ypc27.js +211 -0
  146. package/package.json +20 -3
  147. package/protocol/yak-handler.js +35 -9
  148. package/protocol/yak-protocol.js +28 -13
  149. package/reference/cpp/yakmesh_mceliece_shard.cpp +168 -0
  150. package/reference/cpp/yakmesh_ypc27.cpp +179 -0
  151. package/sbom.json +87 -0
  152. package/scripts/security-audit.mjs +264 -0
  153. package/scripts/update-docs-nav.js +194 -0
  154. package/scripts/update-docs-sidebar.cjs +164 -0
  155. package/security/crypto-config.js +4 -3
  156. package/security/dharma-moderation.js +517 -0
  157. package/security/doko-identity.js +193 -143
  158. package/security/domain-consensus.js +86 -85
  159. package/security/fs-hardening.js +620 -0
  160. package/security/hardware-attestation.js +5 -3
  161. package/security/hybrid-trust.js +227 -87
  162. package/security/karma-rate-limiter.js +692 -0
  163. package/security/khata-protocol.js +22 -21
  164. package/security/khata-trust-integration.js +277 -150
  165. package/security/memory-safety.js +635 -0
  166. package/security/mesh-auth.js +11 -10
  167. package/security/mesh-revocation.js +373 -5
  168. package/security/namche-gateway.js +298 -69
  169. package/security/sakshi.js +460 -3
  170. package/security/sangha.js +770 -0
  171. package/security/secure-config.js +473 -0
  172. package/security/silicon-parity.js +13 -10
  173. package/security/steadywatch.js +1142 -0
  174. package/security/strike-system.js +32 -3
  175. package/security/temporal-signing.js +488 -0
  176. package/security/trit-commitment.js +464 -0
  177. package/server/crypto/annex.js +247 -0
  178. package/server/darshan-api.js +343 -0
  179. package/server/index.js +3259 -362
  180. package/server/komm-api.js +668 -0
  181. package/utils/accel.js +2273 -0
  182. package/utils/ternary-id.js +79 -0
  183. package/utils/verify-worker.js +57 -0
  184. package/webserver/index.js +95 -5
  185. package/assets/yakmesh-logo.png +0 -0
  186. package/assets/yakmesh-logo.svg +0 -80
  187. package/assets/yakmesh-logo2.png +0 -0
  188. package/assets/yakmesh-logo2sm.png +0 -0
  189. package/assets/ymsm.png +0 -0
  190. package/website/assets/silhouettes/adapters.svg +0 -107
  191. package/website/assets/silhouettes/api-endpoints.svg +0 -115
  192. package/website/assets/silhouettes/atomic-clock.svg +0 -83
  193. package/website/assets/silhouettes/base-camp.svg +0 -81
  194. package/website/assets/silhouettes/bridge.svg +0 -69
  195. package/website/assets/silhouettes/docs-bundle.svg +0 -113
  196. package/website/assets/silhouettes/doko-basket.svg +0 -70
  197. package/website/assets/silhouettes/fortress.svg +0 -93
  198. package/website/assets/silhouettes/gateway.svg +0 -54
  199. package/website/assets/silhouettes/gears.svg +0 -93
  200. package/website/assets/silhouettes/globe-satellite.svg +0 -67
  201. package/website/assets/silhouettes/karma-wheel.svg +0 -137
  202. package/website/assets/silhouettes/lama-council.svg +0 -141
  203. package/website/assets/silhouettes/mandala-network.svg +0 -169
  204. package/website/assets/silhouettes/mani-stones.svg +0 -149
  205. package/website/assets/silhouettes/mantra-wheel.svg +0 -116
  206. package/website/assets/silhouettes/mesh-nodes.svg +0 -113
  207. package/website/assets/silhouettes/nakpak.svg +0 -56
  208. package/website/assets/silhouettes/peak-lightning.svg +0 -73
  209. package/website/assets/silhouettes/sherpa.svg +0 -69
  210. package/website/assets/silhouettes/stupa-tower.svg +0 -119
  211. package/website/assets/silhouettes/tattva-eye.svg +0 -78
  212. package/website/assets/silhouettes/terminal.svg +0 -74
  213. package/website/assets/silhouettes/webserver.svg +0 -145
  214. package/website/assets/silhouettes/yak.svg +0 -78
  215. package/website/assets/yakmesh-logo.png +0 -0
  216. package/website/assets/yakmesh-logo.webp +0 -0
  217. package/website/assets/yakmesh-logo128x140.webp +0 -0
  218. package/website/assets/yakmesh-logo2.png +0 -0
  219. package/website/assets/yakmesh-logo2.svg +0 -51
  220. package/website/assets/yakmesh-logo40x44.webp +0 -0
  221. package/website/assets/yakmesh.gif +0 -0
  222. package/website/assets/yakmesh.ico +0 -0
  223. package/website/assets/yakmesh.jpg +0 -0
  224. package/website/assets/yakmesh.pdf +0 -0
  225. package/website/assets/yakmesh.png +0 -0
  226. package/website/assets/yakmesh.svg +0 -70
  227. package/website/assets/yakmesh128.webp +0 -0
  228. package/website/assets/yakmesh32.png +0 -0
  229. package/website/assets/yakmesh32.svg +0 -65
  230. package/website/assets/yakmesh32o.ico +0 -2
  231. package/website/assets/yakmesh32o.svg +0 -65
  232. package/website/assets/yakmesh32o.svgz +0 -0
@@ -453,6 +453,22 @@ export function createNetworkIdentity(oracle) {
453
453
  return new NetworkIdentity(oracle.selfHash);
454
454
  }
455
455
 
456
+ /**
457
+ * Check if a string is a valid iO name (3 words from QUANTUM_WORDLIST)
458
+ * @param {string} name - The name to validate (e.g., "qubit-lattice-prism")
459
+ * @returns {boolean} True if valid iO name
460
+ */
461
+ export function isValidIoName(name) {
462
+ if (!name || typeof name !== 'string') return false;
463
+
464
+ const words = name.toLowerCase().split('-');
465
+ if (words.length !== 3) return false;
466
+
467
+ // Check each word is in the wordlist
468
+ const wordSet = new Set(QUANTUM_WORDLIST);
469
+ return words.every(word => wordSet.has(word));
470
+ }
471
+
456
472
  export { QUANTUM_WORDLIST };
457
473
 
458
474
 
@@ -17,6 +17,7 @@
17
17
  */
18
18
 
19
19
  import { YPC27Checksum, ypc27, bytesToTrits, tritsToBytes, seedFromPeerId, Poly27 } from './ypc27.js';
20
+ import { YPC27_SST } from './ypc27.js';
20
21
 
21
22
  // =============================================================================
22
23
  // PROTOCOL DOMAIN TAGS
@@ -327,6 +328,204 @@ export function unwrapWithChecksum(wrappedMessage, domain, nodeId = null) {
327
328
  }
328
329
  }
329
330
 
331
+ // =============================================================================
332
+ // BATCH CHECKSUM VERIFICATION ENGINE
333
+ // =============================================================================
334
+
335
+ /**
336
+ * BatchChecksumVerifier — Batched YPC-27 verification for high-throughput
337
+ * packet processing. Collects individual verify requests and processes them
338
+ * in a single flush, suitable for routing through the ComputeScheduler.
339
+ *
340
+ * Why batch?
341
+ * - YPC-27 verification involves Poly27 cyclic convolution (O(N²) per check)
342
+ * - Batching amortizes JS object creation overhead
343
+ * - The batch can be routed to GPU via ComputeScheduler for parallel execution
344
+ * - Under load, 50-100 packets/cycle is typical — perfect batch size
345
+ *
346
+ * Usage patterns:
347
+ *
348
+ * 1. Direct (no scheduler):
349
+ * const verifier = new BatchChecksumVerifier();
350
+ * const p1 = verifier.enqueue(data1, checksum1, PROTOCOL_DOMAIN.STUPA);
351
+ * const p2 = verifier.enqueue(data2, checksum2, PROTOCOL_DOMAIN.NAKPAK);
352
+ * // Auto-flushes after threshold or timer
353
+ *
354
+ * 2. Via ComputeScheduler (recommended for production):
355
+ * const result = await scheduler.submit({
356
+ * type: 'ypc27-batch-verify',
357
+ * priority: Priority.HIGH,
358
+ * affinity: Affinity.GPU_PREFERRED,
359
+ * executors: {
360
+ * gpu: () => verifier.flush(),
361
+ * cpu: () => verifier.flush(),
362
+ * }
363
+ * });
364
+ */
365
+ export class BatchChecksumVerifier {
366
+ /**
367
+ * @param {Object} [options]
368
+ * @param {number} [options.minBatchSize=8] — Minimum items before auto-flush
369
+ * @param {number} [options.maxBatchSize=128] — Maximum items per flush
370
+ * @param {number} [options.flushInterval=5] — Ms before timer-triggered flush
371
+ * @param {boolean} [options.useSST=false] — Use YPC27_SST enhanced checksums
372
+ */
373
+ constructor(options = {}) {
374
+ this.minBatchSize = options.minBatchSize ?? 8;
375
+ this.maxBatchSize = options.maxBatchSize ?? 128;
376
+ this.flushInterval = options.flushInterval ?? 5;
377
+ this.useSST = options.useSST ?? false;
378
+
379
+ /** @type {Array<{data: Buffer, checksum: Poly27, domain: string, nodeId: string|null, resolve: Function, reject: Function}>} */
380
+ this._queue = [];
381
+ this._timer = null;
382
+
383
+ // Telemetry
384
+ this._stats = {
385
+ totalEnqueued: 0,
386
+ totalFlushed: 0,
387
+ totalValid: 0,
388
+ totalInvalid: 0,
389
+ totalErrors: 0,
390
+ batchCount: 0,
391
+ avgBatchSize: 0,
392
+ lastFlushMs: 0,
393
+ };
394
+ }
395
+
396
+ /**
397
+ * Enqueue a checksum verification.
398
+ * Returns a promise that resolves with { valid: boolean, index: number }.
399
+ *
400
+ * @param {Object|string|Buffer|Uint8Array} data — Packet data to verify
401
+ * @param {Poly27|string} checksum — Expected checksum (Poly27 or wire format)
402
+ * @param {string} domain — Protocol domain from PROTOCOL_DOMAIN
403
+ * @param {string} [nodeId] — Optional node ID for seed derivation
404
+ * @returns {Promise<{valid: boolean, index: number}>}
405
+ */
406
+ enqueue(data, checksum, domain, nodeId = null) {
407
+ return new Promise((resolve, reject) => {
408
+ const parsedChecksum = typeof checksum === 'string'
409
+ ? checksumFromWire(checksum)
410
+ : checksum;
411
+
412
+ this._queue.push({
413
+ data,
414
+ checksum: parsedChecksum,
415
+ domain,
416
+ nodeId,
417
+ resolve,
418
+ reject,
419
+ });
420
+
421
+ this._stats.totalEnqueued++;
422
+
423
+ if (this._queue.length >= this.minBatchSize) {
424
+ this.flush();
425
+ } else if (!this._timer) {
426
+ this._timer = setTimeout(() => this.flush(), this.flushInterval);
427
+ }
428
+ });
429
+ }
430
+
431
+ /**
432
+ * Process all queued verifications in a single batch.
433
+ * This is the method to pass as an executor to ComputeScheduler.
434
+ *
435
+ * The batch verification leverages:
436
+ * - Shared seed derivation (reuse for same domain+nodeId pairs)
437
+ * - Pre-allocated typed arrays for trit conversion
438
+ * - Sequential Poly27 operations (GPU-parallelizable in future)
439
+ *
440
+ * @returns {{ verified: number, valid: number, invalid: number, errors: number, durationMs: number }}
441
+ */
442
+ flush() {
443
+ if (this._timer) {
444
+ clearTimeout(this._timer);
445
+ this._timer = null;
446
+ }
447
+
448
+ if (this._queue.length === 0) {
449
+ return { verified: 0, valid: 0, invalid: 0, errors: 0, durationMs: 0 };
450
+ }
451
+
452
+ const batch = this._queue.splice(0, this.maxBatchSize);
453
+ const t0 = performance.now();
454
+
455
+ // Cache engines by domain+nodeId to avoid redundant seed derivation
456
+ const engineCache = new Map();
457
+
458
+ let valid = 0;
459
+ let invalid = 0;
460
+ let errors = 0;
461
+
462
+ for (let i = 0; i < batch.length; i++) {
463
+ const item = batch[i];
464
+ try {
465
+ const cacheKey = `${item.domain}:${item.nodeId || ''}`;
466
+
467
+ if (!engineCache.has(cacheKey)) {
468
+ engineCache.set(cacheKey, new PacketChecksum(item.domain, item.nodeId));
469
+ }
470
+
471
+ const engine = engineCache.get(cacheKey);
472
+ const isValid = engine.verify(item.data, item.checksum);
473
+
474
+ if (isValid) {
475
+ valid++;
476
+ this._stats.totalValid++;
477
+ } else {
478
+ invalid++;
479
+ this._stats.totalInvalid++;
480
+ }
481
+
482
+ item.resolve({ valid: isValid, index: i });
483
+ } catch (err) {
484
+ errors++;
485
+ this._stats.totalErrors++;
486
+ item.reject(err);
487
+ }
488
+ }
489
+
490
+ const durationMs = performance.now() - t0;
491
+
492
+ // Update telemetry
493
+ this._stats.totalFlushed += batch.length;
494
+ this._stats.batchCount++;
495
+ this._stats.avgBatchSize = this._stats.totalFlushed / this._stats.batchCount;
496
+ this._stats.lastFlushMs = durationMs;
497
+
498
+ return { verified: batch.length, valid, invalid, errors, durationMs };
499
+ }
500
+
501
+ /**
502
+ * Get verification statistics.
503
+ * @returns {Object}
504
+ */
505
+ getStats() {
506
+ return {
507
+ ...this._stats,
508
+ queueDepth: this._queue.length,
509
+ avgBatchSize: +this._stats.avgBatchSize.toFixed(1),
510
+ lastFlushMs: +this._stats.lastFlushMs.toFixed(2),
511
+ };
512
+ }
513
+
514
+ /**
515
+ * Drain queue and release timer.
516
+ */
517
+ destroy() {
518
+ this.flush();
519
+ if (this._timer) {
520
+ clearTimeout(this._timer);
521
+ this._timer = null;
522
+ }
523
+ }
524
+ }
525
+
526
+ /** Singleton batch verifier for packet checksums */
527
+ export const batchChecksumVerifier = new BatchChecksumVerifier();
528
+
330
529
  // =============================================================================
331
530
  // EXPORTS
332
531
  // =============================================================================
@@ -343,4 +542,6 @@ export default {
343
542
  createMantraChecksum,
344
543
  wrapWithChecksum,
345
544
  unwrapWithChecksum,
545
+ BatchChecksumVerifier,
546
+ batchChecksumVerifier,
346
547
  };